django 中的模板标签执行两次吗?
does it template tag in django execute twice?
如果我在 django 中输入 template.html
这段代码
<p>{% if some_custom_template %} {%some_custom_template%} {% else %} nothing {% endif %}</p>
会some_custom_template
执行两次吗?或者 some_custom_template
结果被缓冲?
如果 some_custom_template
被执行了两次,我如何将第一个结果保存在一些 模板变量中 ?
我相信它会被执行两次,但这取决于some_custom_template
实际上是什么。但无论如何,您可以使用 with
template tag
缓存它
{% with cached_template=some_custom_template %}</p>
<p>
{% if cached_template %}
{{ cached_template }}
{% else %}
nothing
{% endif %}
</p>
{% endwith %}
编辑:根据上下文,您使用的是自定义 template_tag
,这是非常不同的。是的,它们会在您每次调用它们时生成,并且无法缓存。
最好将显示内容的逻辑移动到模板标签中,并删除模板中的 if/then/else
,如下所示:
@simple_tag(name='unread_notification_count', takes_context=True)
def unread_notification_count(context):
if some_check:
return some_value
else:
return "nothing"
然后在模板中调用模板标签:
<p>{% unread_notification_count %}</p>
如果我在 django 中输入 template.html
这段代码
<p>{% if some_custom_template %} {%some_custom_template%} {% else %} nothing {% endif %}</p>
会some_custom_template
执行两次吗?或者 some_custom_template
结果被缓冲?
如果 some_custom_template
被执行了两次,我如何将第一个结果保存在一些 模板变量中 ?
我相信它会被执行两次,但这取决于some_custom_template
实际上是什么。但无论如何,您可以使用 with
template tag
{% with cached_template=some_custom_template %}</p>
<p>
{% if cached_template %}
{{ cached_template }}
{% else %}
nothing
{% endif %}
</p>
{% endwith %}
编辑:根据上下文,您使用的是自定义 template_tag
,这是非常不同的。是的,它们会在您每次调用它们时生成,并且无法缓存。
最好将显示内容的逻辑移动到模板标签中,并删除模板中的 if/then/else
,如下所示:
@simple_tag(name='unread_notification_count', takes_context=True)
def unread_notification_count(context):
if some_check:
return some_value
else:
return "nothing"
然后在模板中调用模板标签:
<p>{% unread_notification_count %}</p>