例如,假设有一个自定义模板标记
{% custom_tag "parameter" %}
此标记需要一些严肃的数据库工作来计算。
现在我需要有类似的东西(伪代码):
if {% custom_tag "parameter" %}
....
else
....
我知道使用上下文变量我可以做到:
{% with variable.x.y.z as v %}
{% if v %}
Blah-Blah-Blah {{ v }}
{% else %}
No value
{% endif %}
{% endwith %}
但有没有办法用模板标签值实现这个目标?
编辑: 到目前为止我唯一提出的选择是从我的模板标签中过滤出来:
{% if "parameter" | custom_tag %}
Blah {{ "parameter" | custom_tag }}
{% else %}
....
{% endif %}
但是这个选项使custom_tag执行两次,而且性能不佳
答案 0 :(得分:3)
我还没有测试过,但我猜你可以在自定义标签的上下文中添加一个变量..也许这会对你有所帮助 http://docs.djangoproject.com/en/dev/howto/custom-template-tags/#setting-a-variable-in-the-context
答案 1 :(得分:1)
我相信您可以将过滤结果分配给变量并使用它。这样过滤器将only get called once。从文档: with :在更简单的名称下缓存复杂变量。这在多次访问“昂贵”方法(例如,击中数据库的方法)时非常有用。
{% with "parameter" | custom_tag as result %}
{% if result %}
Blah {{ result }}
{% else %}
....
{% endif %}
{% endwith %}