问题标签 [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.
jinja2 - Jinja2 编码风格/最佳实践
使用 Jinja2 进行开发时,您有最佳实践和编码风格吗?
就个人而言,我喜欢Plurk/Solace中的风格,但我想知道人们在编写 Jinja2 时还使用了哪些其他风格和做法。
python - Jinja 宏访问不同的块
我试图让 Jinja2 宏输出到调用模板的不同部分。我想这样做的原因是因为有内联 Javascript 作为宏的一部分,但我希望所有 Javascript 都在模板的末尾。我基本上想做这样的事情
并在宏文件中
所以最终的结果会是这样的
我想要我所有的 javascript 在我的模板的末尾,但宏似乎只是在那里返回。
是否有我遗漏的东西或者这超出了标准的 Jinja2 并且需要编写扩展程序?
谢谢
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
(即宏似乎没有以我期望的方式封装块标签)。
我想我的问题很简单:
Jinja2 可以做我正在尝试的事情吗?如果是这样,怎么做?
如果没有,是否有另一个基于 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
.
python - 包含后的 Jinja2 编译扩展
在 Jinja2 中,是否可以在所有语句完成Node
后从 AST 渲染?include
这是解决更大难题的关键部分。
示例代码:
x.py
x.html
y.html
输出是
怎么可能Xs xes
计算 X 的数量y.html
,这是我想要和期望的行为?
换句话说,有没有办法延迟解析或展平从_get_x()
in返回的文本x.html
?
非常感谢您的阅读。
亲切的问候,
布赖恩
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 视图“扩展”到我自己稍微修改的视图登录?
python - Jinja2 AST 的编译小节
可以编译或还原 Jinja2 AST 的一部分吗?
例如,是否可以从从模板中提取的节点列表中调用函数或方法,jinja2.environment
或从节点列表中调用函数或方法?jinja2.compiler.generate
例如,给定一个模板y.html
:
和一个扩展y.py
:
运行python y.py
导致预期输出:
在该parse
方法中,如何可以:
- 编译
body
为 unicode(即tag-content 8
);或者,或者, - 恢复
body
到其原始来源(即tag-content {{ 3 + 5 }}
)。
作为背景问题,这个问题涉及到两个先前的问题:
感谢您的阅读。
布赖恩
django - Django:切换到 Jinja2?
我有几个小的(500 或 600 行模板代码)Django 站点,我想将它们迁移到使用 Jinja2……但我想知道它会做多少工作。那么,一般来说,将一个小型 Django 站点迁移到 Jinja2 需要多少工作量?它“值得”吗?
python - 从 jinja 模板中定义默认变量值的合理方法?
我想在模板本身内部为我的 Jinja 模板中使用的变量设置默认值。查看 Jinja2 文档,我没有看到任何方法可以做到这一点。我错过了什么吗?我看到了“默认”过滤器,但我想将值模板设置为广泛而不是按使用方式设置。
我花了一个小时左右的时间试图自学足够的关于 Jinja2 扩展编写过程的知识来编写扩展标签setdefault
,它可能看起来像这样:
如果未定义分配给名称,则所需效果将等效于set
标记,但如果已定义分配给名称,则没有效果。到目前为止,我还没有让它发挥作用。
我的工作是完全绕过 jinja 并制作一个复合文件;特殊标记之前的区域是默认值的(yaml)映射,标记之后的区域是 jinja 模板。似乎可以正常工作的概念验证实现是:
那么,有没有办法在股票 Jinja2 中做同样的事情,或者如何编写扩展来达到预期的效果?
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 类似如下
python - 你在哪里存储 jinja 中的变量?
我有五个页面具有相同的页面布局和结构,但有一些不同的颜色、文本等,所以这是一个理想的模板环境。我决定使用 Jinja2 和可能的烧瓶。我已经阅读了文档和一些在线教程,其中解释了很多关于你可以在页面上使用模板做什么,但没有太多关于如何将变量发送到页面。
- 您将特定于页面的变量存储在哪里?
- 代码如何知道请求了哪个页面以及要加载哪些变量?