情况真的像答案听起来那样无望吗?
差不多。但是,由于我在一个曾经基于 Django 但现在基于 Backbone 的网站上工作,我可以提供一些想法:
路由像 /italy/1-week/from-500-to-1000/ 这样的 URL - 我现在需要编写两组路由代码,一组在 Django 的 urls.py 中,另一组在 Backbone 的路由器中,以获取国家/持续时间/价格参数?
是的,但有一些方法可以最大限度地减少重复。我们采用的方法是让 Django 将所有 URL 作为 JS 变量输出到我们的主 HTML 页面模板中:
<script>
URLS.report_error = "{% url app.log_client_error_view %}";
URLS.access_file = "{% url app.access_file_view 12345 %}";
</script>
现在我们有一个使用 12345 作为我们生成的每个 URL 中的参数的模式;这使得将 URL 转换回 Backbone 路由正则表达式变得很容易,因为我们基本上可以12345
用([^/]+)
.
为了全面披露,我们确实有一堆“手工”编写的路由正则表达式,但这并不是因为我们无法自动化它们;只是我们正在远离 Django 方面,所以我们没有理由清理该代码。如果你想获得支持两者的核心,你应该能够想出一个非常简单/简单的翻译方案。
根据参数过滤数据 - 我是否需要编写两种不同的方法,一种在 views.py 中,另一种在 Backbone 中?(我假设我至少可以为这两个调用使用一个 API。)
这在任何网站上基本上都是不可避免的问题,不仅仅是 Backbone/Django。您必须在服务器端过滤数据,因为您永远无法信任客户端(例如,用户可以禁用 JS)。同时,仅服务器端的过滤是 1990 年代的,因此您还需要在客户端创建(重复)过滤逻辑(这样您就可以告诉用户“您忘记提供字段 X”而无需等待往返服务器)。
但是,有一些方法可以限制这种重复。我自己并没有在这件作品上工作,但我知道一位同事设法以一种奇怪的方式使用 Django 表单(他采用了 Django 提供的表单,然后在将它们用作主干视图的模板之前稍微解析了它们)。这并没有完全消除重复,不幸的是我不记得任何细节,但它确实有帮助。
在模板中渲染 - 我需要为 Django 编写一个列表模板,为 Backbone 编写另一个列表模板,还是两者都可以使用相同的模板?
如果您所做的只是变量 ( {{foo}}
),Handlebars 模板的语法与 Django 模板相似。如果您想在两者之间共享逻辑,则两者的语法({% if foo %}
vs. {{#if foo}}
)略有不同,但它们足够接近,如果您不介意做一些解析工作,您应该能够轻松地将一个转换为另一个。
所以,是的,你做了大量的工作只是为了支持你的一小部分用户(那些浏览器不支持 Backbone 的用户)。我强烈建议您在 Google Analytics 之类的地方查看用户的浏览器统计信息(或者如果您的网站尚未启动,请查看一般网络统计信息),以确定对于您的一小部分用户群而言,所有这些麻烦是否真的值得. 如果没有统计数据,您将无法知道该百分比有多小,并且显然是该决定的关键因素。
对我们来说,选择是显而易见的:要求我们的用户使用本世纪制造的浏览器(这几乎是 Backbone 的所有需求),并且只使用 Backbone。但是如果这个选择对你来说不是那么明显......祝你好运尝试干掉你的 Django 和 Backbone 代码:-)