有没有办法在Django模板中重用模板标签值?

时间:2010-08-09 10:09:26

标签: django django-templates

例如,假设有一个自定义模板标记

{% 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执行两次,而且性能不佳

2 个答案:

答案 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 %}