如何使用Django模板存储templatetag的结果?

时间:2014-01-30 12:29:41

标签: django django-templates

使用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

2 个答案:

答案 0 :(得分:2)

如果标签是您控制的内容,那么可以考虑使用assignment tag。如果标签不是您控制的标签,那么您可能必须使用自己的分配标签对其进行包装。

答案 1 :(得分:1)

@register.assignment_tag(takes_context=True)
def render_html(context, content):
    return Template(content).render(context)

但我不知道你想要达到的目的是什么?在视图函数中执行此类操作并根据结果使用TemplateResponse调用不同的模板不是更好吗?