python - 是否可以在 Django 中进行部分模板渲染?
问题描述
我想知道是否可以部分渲染 Django 模板。让我说清楚我想要什么,请检查一下(这是在 django shellpython manage.py shell
中,而不是在基本的 python shell 中):
from django.template import Context, Template
t = Template('{{var1}} - {{var2}}, {% if var2 %} {{var3}} {% endif %}')
t.render(Context({'var1': 'test'}))
输出:
'test - , '
但我想知道,是否可以只渲染传递的变量,所以我想要的输出是
'test - {{var2}}, {% if var2 %} {{var3}} {% endif %}'
我想得到它,因为我没有通过var2
,我这里的主要目标是分几步渲染模板,而不是一步。我知道有一个string_if_invalid
设置,但它仅用于调试目的。
解决方案
这是开箱即用的。变量的评估发生在渲染模板节点时,因此每个模板标签都必须支持这一点。
对于非常简单的模板,例如{{var1}} - {{var2}}
,您可以创建一个自定义Context
子类来返回{{ key }}
任何缺失的变量。但是,一旦您使用过滤器或在标签中使用变量,这种方法就不会按预期工作,就像在您的示例中一样。
推荐阅读
- java - spring data r2dbc 可以生成模式吗?
- python-3.x - 如何使用 python 将扫描的 PDF 文件转换为可编辑的 PDF 文件?
- html - 移动浏览器在加载 html5 背景视频时遇到问题
- javascript - 如何在按钮单击时从数组javascript调用函数
- javascript - 日志 = 新日志(“调试”);
- unity3d - 孩子们在 Unity 中以父母为中心“自动居中”
- javascript - 有没有办法使用javascript在客户端对视频文件(.mkv)进行一些操作?
- mysql - closeCells() 查询说明
- javascript - “i”变量在控制台中未定义
- ruby-on-rails - Rails + Sidekiq: Sidekiq.options[:concurrency] returns 10 instead of 3, which is the value in my config/sidekiq.yml file