<blockquote>
<p>is the situation really as hopeless as the answer makes it sound?</p>
</blockquote>
<p>差不多。但是,由于我在一个以前是基于Django的网站上工作,但现在正变得基于主干网,所以我可以提供一些想法:</p>
<blockquote>
<p>Routing a URL like /italy/1-week/from-500-to-1000/ - do I now need to write two sets of routing code, one in Django's urls.py and one in Backbone's router, to get the country/duration/price parameters?</p>
</blockquote>
<p>是的,但有办法尽量减少重复。我们采用的方法是让Django将所有url作为JS变量输出到我们的主HTML页面模板上:</p>
<pre><code><script>
URLS.report_error = "{% url app.log_client_error_view %}";
URLS.access_file = "{% url app.access_file_view 12345 %}";
</script>
</code></pre>
<p>现在我们有了一个模式,在我们生成的每个URL中使用12345作为参数;这使得将该URL转换回主干路由regex变得很容易,因为我们基本上可以将<code>12345</code>替换为<code>([^/]+)</code>。在</p>
<p>为了全面披露,我们确实有一堆路由regex是“手工”编写的,但这并不是因为我们不能自动化它们;只是我们正在远离Django方面的东西,所以我们没有理由清理这些代码。如果你想在支持两者的问题上取得核心,你应该能够想出一个相当简单/简单的翻译方案。在</p>
<blockquote>
<p>Filtering the data, based on the parameters - do I need to write two separate ways of doing this, one in views.py and one in Backbone? (I assume I can at least use a single API for both calls.)</p>
</blockquote>
<p>这在任何站点上都是一个基本上不可避免的问题,不仅仅是主干网/Django。您可以在服务器端过滤数据,因为您永远不信任客户端(例如,用户可以禁用JS)。同时,服务器端的过滤是sooo 1990年代的,所以你需要在客户端创建(复制)过滤逻辑(这样你就可以告诉用户“你忘了提供字段X”,而不用等待服务器的往返)。在</p>
<p>但是,有一些方法可以限制这种重复。我自己并没有写这篇文章,但我知道一个同事以一种奇怪的方式使用Django表单(他采用Django提供的表单,然后在将其用作主干视图的模板之前对其稍加解析)。这并没有完全消除重复,不幸的是,我不记得任何细节,但它确实有帮助。在</p>
<blockquote>
<p>Rendering in templates - do I need to write one list template for Django and another for Backbone, or can both use the same templates?</p>
</blockquote>
<p>如果您所做的只是变量(<code>{{foo}}</code>),那么手柄模板的语法与Django模板类似。如果您想在两者之间共享逻辑,这两种语言的语法略有不同(<code>{% if foo %}</code>vs.<code>{{#if foo}}</code>),但是它们非常接近,如果您不介意做一些解析工作,您应该可以很容易地将一个转换为另一个。在</p>
<p>所以,是的,你需要做大量的工作来支持你的一小部分用户(那些浏览器不能支持主干网)。我强烈建议你在Google Analytics之类的网站上查看用户的浏览器统计数据(如果你的网站还没有建立起来的话,也可以查看一般的web统计数据),以确定对于你的一小部分用户来说,所有这些麻烦是否真的值得。如果没有统计数据,你就不可能知道这个百分比有多小,很明显这是决定的一个关键因素。在</p>
<p>对我们来说,选择是显而易见的:要求我们的用户使用本世纪制造的浏览器(这几乎是所有主干网的需要),而只需使用所有主干网。但如果这个选择对你来说不那么明显。。。祝你好运,试着干掉你的Django和主干代码:-)</p>