使用Django 1.5.5我需要调用自定义模板标签并以某种方式将结果存储在变量中,以检查它是否包含非空的空字符串。我需要看起来像这样的东西:
{% load smart_html %}
{% render_html widget.content as widget_content %}
{% if widget_content %}
Do stuff here...
{% endif %}
这是受{%url%}内置模板标签的启发,允许调用它使用语法将结果存储在变量中:
{% url 'named_url' as my_named_url %}
我的模板标签如下:
@register.simple_tag(takes_context=True)
def render_html(context, html):
"""Allows executing 'Django code' within the HTML"""
return Template(html).render(context)
我还考虑过将自定义templatetag中返回的值添加到上下文中。你怎么看待这件事?这会危险吗?这看起来像是:
@register.simple_tag(takes_context=True)
def render_html(context, html, var_name=None):
"""Allows executing 'Django code' within the HTML"""
html = Template(html).render(context)
if var_name:
context[var_name] = html
html = ''
return html
答案 0 :(得分:2)
如果标签是您控制的内容,那么可以考虑使用assignment tag。如果标签不是您控制的标签,那么您可能必须使用自己的分配标签对其进行包装。
答案 1 :(得分:1)
@register.assignment_tag(takes_context=True)
def render_html(context, content):
return Template(content).render(context)
但我不知道你想要达到的目的是什么?在视图函数中执行此类操作并根据结果使用TemplateResponse
调用不同的模板不是更好吗?