首页 > 解决方案 > 是否可以在 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设置,但它仅用于调试目的。

标签: pythondjango

解决方案


这是开箱即用的。变量的评估发生在渲染模板节点时,因此每个模板标签都必须支持这一点。

对于非常简单的模板,例如{{var1}} - {{var2}},您可以创建一个自定义Context子类来返回{{ key }}任何缺失的变量。但是,一旦您使用过滤器或在标签中使用变量,这种方法就不会按预期工作,就像在您的示例中一样。


推荐阅读