问题标签 [jinja2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
5462 浏览

jinja2 - Jinja2 编码风格/最佳实践

使用 Jinja2 进行开发时,您有最佳实践和编码风格吗?

就个人而言,我喜欢Plurk/Solace中的风格,但我想知道人们在编写 Jinja2 时还使用了哪些其他风格和做法。

0 投票
2 回答
2160 浏览

python - Jinja 宏访问不同的块

我试图让 Jinja2 宏输出到调用模板的不同部分。我想这样做的原因是因为有内联 Javascript 作为宏的一部分,但我希望所有 Javascript 都在模板的末尾。我基本上想做这样的事情

并在宏文件中

所以最终的结果会是这样的

我想要我所有的 javascript 在我的模板的末尾,但宏似乎只是在那里返回。

是否有我遗漏的东西或者这超出了标准的 Jinja2 并且需要编写扩展程序?

谢谢

0 投票
4 回答
16279 浏览

python - 在 Jinja 2 中包含文件的顶部插入 javascript

在 Jinja2 中,我希望通过运行以下命令按其应有的方式工作:

<head>本质上,目标是通过使用{% call js() %} /* some js */ {% endcall %}宏将所有 javascript 合并到标签中。


x.html


y.html


预期结果

当我通过 jinja2 运行 X.html 时,我希望结果是:


实际结果

实际结果并不令人鼓舞。我得到了几种可能具有启发性的错误,例如:

类型错误:宏“js”没有关键字参数“调用者”

或者,当我尝试添加另一个基础宏时,例如

我得到以下异常

jinja2.exceptions.TemplateAssertionError: block 'head_js' 定义了两次

我觉得好像我遇到了关于block标签优先于标签的设计问题macro(即宏似乎没有以我期望的方式封装块标签)。


我想我的问题很简单:

  1. Jinja2 可以做我正在尝试的事情吗?如果是这样,怎么做?

  2. 如果没有,是否有另一个基于 Python 的模板引擎支持这种模式(例如 mako、genshi 等),它可以在 Google App Engine 中正常工作

感谢您阅读 - 我感谢您的意见。

布赖恩


编辑:

我正在尝试编写一个扩展来解决这个问题。我已经完成了一半——使用以下代码:

这使得将 Javascript 添加到模板末尾变得很简单......例如

运行env.get_template('x.html').render()将产生一些启发性的评论和预期的输出:

当然,这与希望的那样将脚本放在头脑中并不相同,但至少它可以方便地合并到一个地方。

但是,解决方案并不完整,因为当您{% include "y.html" %}在其中有一个“y.html”包含{% js %}语句时,{% js_content %}会在包含语句之前调用该{% js %}语句(即在开始x.html之前完全解析y.html)。

我还需要(但还没有)插入具有静态 javascript 的常量节点,try/catch我表示我想在其中拥有它。这不是问题。

我很高兴能取得进展,我很感谢您的意见。

我已经打开了相关问题:Jinja2 compile extension after includes


编辑

解决方案

完成后,环境将包含一个包含jbc所有 Javascript 的变量。例如,我可以通过string.Template.


0 投票
1 回答
1003 浏览

python - 包含后的 Jinja2 编译扩展

在 Jinja2 中,是否可以在所有语句完成Node后从 AST 渲染?include

这是解决更大难题的关键部分

示例代码:

x.py

x.html

y.html

输出是

怎么可能Xs xes计算 X 的数量y.html,这是我想要和期望的行为?

换句话说,有没有办法延迟解析或展平从_get_x()in返回的文本x.html

非常感谢您的阅读。

亲切的问候,

布赖恩

0 投票
1 回答
405 浏览

django - Django:使用 Django + django-registration + jinja 查看问题

因此,我有一个使用 jinja2 渲染的 django 项目,并且我还安装了 django-registration 以使我的生活更轻松。我遇到了以下问题:

转到主页我用 jinja 渲染它。为了检查身份验证,我必须使用 jinja 的语法,即 user.is_authenticated()。但是,在常规 django 模板中,此检查是使用 user.is_authenticated 完成的。如果在常规 django 模板中有 (),则会出错。

所以进入 /accounts/login/ 页面,django-registration 模块并没有做任何特别的事情,所以它通过以下方式将 url 转发到标准 django 视图:

所以我确定我不应该改变 django.contrib.auth 视图,但是我在哪里放置我自己的视图呢?在 myapp/views.py 中?

而且,我是否必须复制粘贴 django 视图,然后在其上进行修改(在这种情况下,只需用 render_jinja 替换渲染)还是有办法将这个原始 django 视图“扩展”到我自己稍微修改的视图登录?

0 投票
1 回答
1280 浏览

python - Jinja2 AST 的编译小节

可以编译或还原 Jinja2 AST 的一部分吗?

例如,是否可以从从模板中提取的节点列表中调用函数或方法,jinja2.environment或从节点列表中调用函数或方法?jinja2.compiler.generate

例如,给定一个模板y.html

和一个扩展y.py

运行python y.py导致预期输出:

在该parse方法中,如何可以:

  1. 编译body为 unicode(即tag-content 8);或者,或者,
  2. 恢复body到其原始来源(即tag-content {{ 3 + 5 }})。

作为背景问题,这个问题涉及到两个先前的问题:

  1. Jinja2 在包含后编译扩展;和
  2. 在 Jinja 2 中包含文件的顶部插入 javascript

感谢您的阅读。

布赖恩

0 投票
4 回答
28129 浏览

django - Django:切换到 Jinja2?

我有几个小的(500 或 600 行模板代码)Django 站点,我想将它们迁移到使用 Jinja2……但我想知道它会做多少工作。那么,一般来说,将一个小型 Django 站点迁移到 Jinja2 需要多少工作量?它“值得”吗?

0 投票
3 回答
11702 浏览

python - 从 jinja 模板中定义默认变量值的合理方法?

我想在模板本身内部为我的 Jinja 模板中使用的变量设置默认值。查看 Jinja2 文档,我没有看到任何方法可以做到这一点。我错过了什么吗?我看到了“默认”过滤器,但我想将值模板设置为广泛而不是按使用方式设置。

我花了一个小时左右的时间试图自学足够的关于 Jinja2 扩展编写过程的知识来编写扩展标签setdefault,它可能看起来像这样:

如果未定义分配给名称,则所需效果将等效于set标记,但如果已定义分配给名称,则没有效果。到目前为止,我还没有让它发挥作用。

我的工作是完全绕过 jinja 并制作一个复合文件;特殊标记之前的区域是默认值的(yaml)映射,标记之后的区域是 jinja 模板。似乎可以正常工作的概念验证实现是:

那么,有没有办法在股票 Jinja2 中做同样的事情,或者如何编写扩展来达到预期的效果?

0 投票
1 回答
1085 浏览

django - Django 与 Mako Jinja2 模板比较的集成使用:render_to_response。问题?

我正在使用 Django 来构建我的网络项目。众所周知,mako 和 Jinja2 模板比 Django 提供的更快,我开始寻找使用 Django 的 render_to_response 方法将 mako 和 Jinja2 集成到 Django 中的方法。经过大量研究,我终于找到了实现这一目标的方法。但是,在我的集成中,jmeter 的性能类似于 Jinja2 (3ms) > Django 的模板 (50ms) > mako (218ms)。

如果我出了什么问题?....或者请帮助建议一些最佳实践来集成 jinja2 和 mako。

下面是编码()

Mako2django.py

Jinja2django.py

view.py 类似如下

0 投票
2 回答
17107 浏览

python - 你在哪里存储 jinja 中的变量?

我有五个页面具有相同的页面布局和结构,但有一些不同的颜色、文本等,所以这是一个理想的模板环境。我决定使用 Jinja2 和可能的烧瓶。我已经阅读了文档和一些在线教程,其中解释了很多关于你可以在页面上使用模板做什么,但没有太多关于如何将变量发送到页面。

  • 您将特定于页面的变量存储在哪里?
  • 代码如何知道请求了哪个页面以及要加载哪些变量?