笨鸟编程-零基础入门Pyhton教程

 找回密码
 立即注册

常见问题

发布者: 笨鸟自学网

本页回答了一些关于 Jinja 的常见问题。

为什么叫做 Jinja ?

选择 Jinja 作为名字是因为 Jinja 是日本寺庙的名称,并且 temple 和 template 的发音类似。它并不是以乌干达的金贾市(Jinja)命名的。

它有多快?

我们相当厌烦基准测试,尤其是因为它们并不能影响什么。一个模板的性能取决于许多因 素,而你可能需要在不同环境中对不同的引擎做基准测试。测试套件中的基准测试表明, Jinja2 与 Mako 的性能相近,比 Django 的模板引擎或 Genshi 快 10 到 20 倍。这 些数字应该相当有刺激性,因为基准测试只测试一些性能相关的场景,比如循环,来获取 这些数字。大体上,一个模板引擎的性能几乎不会成为一个 web 应用的瓶颈,而应该是 数据库或应用的代码。

Jinja2 与 Django 兼容性如何?

Jinja2 的语法与 Django 的语法很多都匹配。但这并不意味着你可以直接在 Jinja2 中原封不动地使用 Django 模板。例如过滤器参数使用函数调用语法而不是用冒号分 隔过滤器名和参数。此外, Jinja 中的扩展接口与 Django 的有根本区别,这意味着 你的自定义标签不能再正常工作。

总体而言,因为 Jinja 模板系统允许你使用一个 Python 表达式的特定子集,你 会使用相当少的自定义扩展,且可以替代大多数的 Django 扩展。例如,不是用下 面的这样:

{% load comments %}
{% get_latest_comments 10 as latest_comments %}
{% for comment in latest_comments %}
    ...
{% endfor %}

你会更可能提供一个对象,用属性来检索数据库中的评论:

{% for comment in models.comments.latest(10) %}
    ...
{% endfor %}

或直接为快速测试提供模型:

{% for comment in Comment.objects.order_by('-pub_date')[:10] %}
    ...
{% endfor %}

请记住即使你能在模板中放置这样的东西,这也不是一个好主意。查询应该在视图代 码中执行,而不是模板中!

把逻辑放在模板里是不是个可怕的主意?

毫无疑问,你应该尽可能把逻辑从模板中移除。但没有逻辑的模板意味着你不得不 在代码中做所有的处理,而这是无趣和愚蠢的。一个如此做的支持 Python 的模板引 擎名为 string.Template ,它没有循环和 if 条件,且是迄今为止你可以在 Python 中使用的最快的模板引擎。

所以模板中某种数量的逻辑会让你愉悦。而且 Jinja 把要在模板中放置多少逻辑的问 题几乎都留给你了。这里有一些你可以做和不可以做的限制。

Jinaja2 不允许你在模板中放置任意的 Python 代码,也不允许全部的 Python 表达 式。操作符限定为最常用的那些,且不支持诸如列表推导式和生成器表达式等高级表 达式。这使得模板引擎易于维护,并且模板有更好的可读性。


12下一页
上一篇:提示和技巧

Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )

GMT+8, 2024-9-8 11:48 , Processed in 0.038532 second(s), 17 queries .

© 2001-2020

返回顶部