- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个非常简单的 Django 应用程序,它允许用户提交表单并查看根据国家/地区、持续时间和价格过滤的假期列表。
我想在前端使用 Backbone,这样启用 JS 的用户不需要 GET 就可以看到结果,而是可以动态加载。
我想使用 progressive enhancement ,让有 JS 的用户获得 Backbone 体验,没有 JS 的用户仍然可以使用表单。我也想关注DRY principle .
我的问题是如何最好地做到这一点。是否有将两者一起使用且重复次数最少的示例?我特别想到:
/italy/1-week/from-500-to-1000/
这样的URL - 我现在需要写两套路由代码,一套在 Django 的 urls.py
和 Backbone 的路由器中,获取国家/持续时间/价格参数?views.py
中,一种在 Backbone 中? (我假设我至少可以为这两个调用使用一个 API。)到目前为止,我发现将 Backbone 集成到 Django 中的最佳(唯一)示例是 Josh Bohde 的 Django Backbone repo , 这不是逐步增强的。
我也找到了这个 blog post on progressive enhancement with Backbone and Rails ,但是看到 Django 的类似内容真的很有用。
更新:刚刚找到 this SO question on a similar topic - 情况真的像答案听起来那么绝望吗?
最佳答案
is the situation really as hopeless as the answer makes it sound?
差不多。但是,由于我在一个曾经基于 Django 但现在正在变成基于 Backbone 的网站上工作,我可以提供一些想法:
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?
是的,但是有一些方法可以最大程度地减少重复。我们采取的方法是让 Django 将所有 URL 作为 JS 变量输出到我们的主要 HTML 页面模板中:
<script>
URLS.report_error = "{% url app.log_client_error_view %}";
URLS.access_file = "{% url app.access_file_view 12345 %}";
</script>
现在我们有一个模式,在我们生成的每个 URL 中使用 12345 作为参数;这使得将该 URL 转换回主干路由正则表达式变得容易,因为我们基本上可以将 12345
替换为 ([^/]+)
。
为了全面披露,我们确实有一堆“手工”编写的路由正则表达式,但这并不是因为我们无法将它们自动化;只是我们正在远离 Django 方面的事情,所以我们没有理由清理这些代码。如果您想坚定地支持这两者,您应该能够想出一个非常容易/简单的翻译方案。
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.)
这在任何网站上基本上都是无法避免的问题,不仅仅是Backbone/Django。您必须在服务器端过滤数据,因为您永远无法信任客户端(例如,用户可能会禁用 JS)。同时,仅服务器端过滤是 1990 年代的事情,因此您还需要在客户端创建(重复)过滤逻辑(这样您就可以告诉用户“您忘记提供字段 X”而无需等待用于到服务器的往返)。
但是,有一些方法可以限制这种重复。我自己并没有从事这方面的工作,但我知道一位同事设法以一种奇怪的方式使用 Django 表单(他采用了 Django 提供的表单,然后在将它们用作 Backbone View 的模板之前稍微解析它们)。这并没有完全消除重复,不幸的是我不记得任何细节,但它确实有帮助。
Rendering in templates - do I need to write one list template for Django and another for Backbone, or can both use the same templates?
如果您所做的只是变量 ({{foo}}
),Handlebars 模板的语法与 Django 模板类似。如果你想在两者之间共享逻辑,两者的语法略有不同({% if foo %}
vs. {{#if foo}}
),但它们是足够接近,如果您不介意做一些解析工作,您应该可以轻松地将一个转换为另一个。
是的,您需要做很多工作来支持您的一小部分用户(那些使用不支持 Backbone 的浏览器的用户)。我强烈建议您在诸如 Google Analytics(分析)之类的地方查看用户的浏览器统计信息(或者如果您的网站尚未启动,则查看一般网络统计信息),以确定所有这些麻烦是否真的值得您的用户群的一小部分。没有统计数据,您无法知道该百分比有多小,而这显然是该决定的关键因素。
对我们来说,选择是显而易见的:要求我们的用户使用本世纪制造的浏览器(这几乎是 Backbone 的所有需求)并且只使用所有 Backbone。但是如果这个选择对你来说不是那么明显......祝你好运尝试 DRY up 你的 Django 和 Backbone 代码:-)
关于javascript - 使用 Django 和 Backbone 进行渐进增强 - 如何将两者集成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156525/
我正在尝试使用增强的 for 循环遍历 Iterable,但我无法确定何时处理最后一个值。 public void apply(Tuple key,
我正在使用以下代码在 Sheet2 的 A:H 范围内查找和替换 Sheet1 中存在的单词列表(ColA 用于 FIND 单词,ColB 用于 REPLACE 单词)。它执行这项工作,但非常缓慢。可
我正在使用 Hibernate (JPA2) hibernate.hbm2ddl.auto=update用于测试和 hibernate.hbm2ddl.auto=validate用于生产。 我想要做的
基本问题: 为什么我只能用 Scala 编写: println(10) 为什么我不需要写: Console println(10) 后续问题: 如何引入一个新方法“foo”,它像“println”一样
我正在尝试将 Maven 项目迁移到 Bazel,但在 Datanucleus 增强方面遇到了麻烦。 后 jar -file 已构建,Datanucleus 会查看其中的内部并执行一些字节码操作以增强
正在使用 css3 转换进行漂亮的导航。为此还编写了一些 javascript。 但不幸的是它看起来有点凌乱。你们能给我一些优化 javascript 代码的技巧吗? 笔--> http://code
我想将自定义任务绑定(bind)到默认构建器发布周期中。我想在项目编译、打包、标记和部署之后但在增加版本号并提交之前运行此代码。 我将如何融入发布周期的这一部分? 最佳答案 不幸的是,release
我使用ElasticSearch 6.6。我的应用程序通过从不同数据源提取数据来构建ES索引。搜索未指定数据源。它只是建立一个类似的查询: GET employerdata/_search { "
我正在使用此代码将“k1 = v1; k2 = v2; k3 = v3; kn = vn”字符串解析为映射。 qi::phrase_parse( begin,end,
我正在试图弄清楚作业的一部分,但我已经把头撞在墙上有一段时间了。我正在尝试将 DNA 序列转录为 RNA 序列。然而,我收到了 ArrayOutOfBoundsException。我不熟悉使用增强的
我需要对基于 python Google App Engine 的应用程序的警告进行分类。我从 GAE stackdriver 下载日志。我认为 GAE Stackdriver 错误报告位于 http
我有一个 django charField,通过 is_valid() 方法进行检查。用户应该在此字段中输入有效的逻辑表达式,因此我编写了一个解析方法,如果表达式不正确,该方法会引发异常。 如何增强
我编写了以下控制台应用程序,要求用户输入一天。 我需要一些帮助才能改进,以便他们为一周中的所有日子提供正确的答案。 如果用户输入除星期一以外的任何其他日期,则输出为“今天”、“昨天”、“明天”,并在这
我在使用带有 ES6 let 关键字的模块模式(扩充)时遇到错误。 这有效。 var Example = ( Example => { Example.name = ""; retur
我只是问是否线程安全可以使用 我明确指出“doSomething()”是线程安全的。 最佳答案 线程安全取决于您正在迭代的 Collection,而不是 enhanced for 的使用。如果 Col
我有一个非常符合 this Jquery demo 的要求,这是一个简单的购物车演示。基本上,我需要对该演示进行两项改进。 我需要文本输入以及可用的“产品”。因此,当我拖放其中一种产品时,文本字段应随
我正在三个表 messages、message_recipients 和 users 上运行查询。 messages表的表结构: id int pk message_id int message te
这个问题已经有答案了: In detail, how does the 'for each' loop work in Java? (29 个回答) 已关闭 4 年前。 由于增强的 for 循环是只读
我在 css 中制作了一个很酷的鼠标悬停,当父级鼠标悬停时它会显示动画 gif。 这是我的代码:http://codepen.io/clemeeent/pen/oggzMa 问题是我将有大约 40 天
目前,当使用 Knockout foreach 绑定(bind)时,您可以使用 $index 访问当前索引。我想让其他类似的功能可用于我的内部绑定(bind) - 例如: array(让我访问正在操作
我是一名优秀的程序员,十分优秀!