Django车把

django-handlebars的Python项目详细描述


django手柄集成了Handlebarsjavascript模板引擎和Django。它提供了用于包装模板包含和加载例程的python和javascript帮助程序。可选的django handlebars提供了便于编译的manage.py命令(需要python-spidermonkey)和实时模板资源同步(需要pyinotify)。

如何安装

  1. 从pypipip install django-handlebars安装包。或者拉动repo并运行python setup.py install
  2. django_handlebars添加到项目的settings.INSTALLED_APPS
  3. 可选地将HANDLEBARS_*配置参数添加到settings.py。有关可用选项和说明,请参见django_handlebars.appsettings
  4. 运行./manage.py test django_handlebars检查配置和要求。
  5. 应该就是这样。应用程序没有提供任何模型或url。

如何使用

django手柄可以在两种模式下工作:在浏览器中编译模板和在服务器端呈现预编译的模板。在这两种情况下,模板可能随ajax请求动态加载,或者包含在页面上以防止额外的http请求。

首先,您必须在页面上插入把手脚本:

{% load handlebars_tags %}
<html>
<head>
  {% handlebars_scripts %}
</head>
<body></body>
</html>

它将添加handlebars_config变量存储配置,script标记handlebars.js(如果settings.HANDLEBARS_COMPILEDTrue,则添加handlebars.runtime.js标记)和handlebars.django.js。django handlebars通过使用tpl()方法扩展handlebars对象,提供了模板加载客户端(参见handlebars.django.js)。

在浏览器中编译

此模式更简单,不需要满足可选依赖项。但这会增加一些开销。在这种情况下,handlebar将每隔加载一次页面就解析一次模板,除了渲染器之外,还必须加载解析器脚本。

假设您已经配置了应用程序,并且您的把手*.html模板可以从静态url访问,那么您的典型使用模式如下:

var data = {title: "The title", body: "whatever"}

Handlebars.tpl("your/template/spec", {
    success: function(renderer){
        console.log("Rendered template:", renderer(data));
    },
    error: function(xhr, err){
        console.warn("Ooops, can't load template", err);
    }
});

请注意,模板路径不包括dir url和扩展名。允许起始斜杠。Handlebars.tpl不返回模板,只有success回调才能获取模板。

默认情况下,客户端尝试使用jQuery如果它可用,否则它将返回到自己的简单crossbrowser xhr实现。如果jquery可用,Handlebars.tpl()调用将返回jquery.deferred对象,因此可以使用链接和其他好处:

var df = Handlebars.tpl("your/template/spec");

df.done(function(renderer){
    console.log("Rendered template:", renderer(data));
}).fail(function(xhr, err){
    console.warn("Ooops, can't load template", err);
});

loader追加.html扩展名并从settings.HANDLEBARS_TPL_URL

使用预编译模板

在此模式下,javascript代码保持不变,但客户端将尝试从settings.HANDLEBARS_TPL_URL中提取.js文件。预编译文件包含由Handlebars.precompile(str_template)生成的js函数。您可以在浏览器控制台中运行此命令以查看其外观。django handlebars提供manage.py命令来批量生成这些文件。

消除额外的请求

在上述两种情况下,都会发出http请求,这会降低性能。为了避免出现这种情况,请在页面上包含模板:

{% handlebars_template "your/template/spec" %}

这将通过调用Handlebars.tpl("your/template/spec", tpl)来缓存模板。所描述的技术适用于常规和预编译模式。

如何编译

运行./manage.py compilehandlebars --help

--clean               Remove all previously compiled templates
--watch               Watch for changes within appsettings.TPL_DIR and compile
--raw                 Do not format output
--quiet               Run with no output

django hadlebars使用SpiderMonkey运行handlebars脚本来编译模板,并要求安装python-spidermonkey包。

到目前为止,--watch选项仅在linux平台上可用,因为它使用的是pyinotify。未来可能会增加对其他平台的支持。

如果这两个都没有安装,{TT27 } $将以适当的错误消息退出。

compilehandlebars开始时,将重新编译mtime比编译文件mtime新的所有模板文件。如果您运行的命令没有^ {TT26},编译器退出一次所有文件编译,否则它将挂起,直到你按下^ {TT30}$。

许可证

版权所有2012 Sergii Iavorskyi,许可新型BSD。包含Handlebars.js版权所有2011 Y伊胡达·卡茨。有关详细信息,请参见许可证文件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何拆分字符串(基于各种分隔符),但不保留空格?   解析。Json格式的txt文件和knime中的java   java Spring rest api为什么在rest api调用的响应中更改了数据类型   升华文本3抛出java。lang.ClassNotFoundException,而记事本++不存在   java Android指纹扫描仪在尝试5次后停止工作?   java Android如何设置精确的重复报警?   java如何使用HTTPGET connect为access API输入用户名和密码   java当测试报告显示没有测试失败时,Gradle为什么说“有失败的测试”?   用Gson实现java获取响应   MapReduce程序中函数错误的java不可映射参数   java spring安全性不符合自动代理的条件   java GWT使用异步回调进行同步/阻塞调用   java奇怪的类数组问题无法在jsp中显示   如何在java中使用PrinterJob使用epl打印条形码   java如何在JTable中居中单元格   将Java Mockito测试转换为Kotlin   html Java正则表达式模式匹配到多个相同标记   testCompile中缺少java Gradle(Android)多项目依赖项   在输入提示后输入字符串时发生java FileNotFoundException