1

我有一个部分模板,每次包含它时都需要一个随机字符串。我需要访问相同的随机字符串而不是每次包含一次,我不确定将包含多少次部分。

我目前正在这样做以将其添加到上下文中

@register.tag
def randomgen(parser, token):
    return RandomgenNode()


class RandomgenNode(template.Node):
    def render(self, context):
        context['randomgen_str'] = os.urandom(16).encode('hex')
        return ''

这让我可以{% randomgen %}在部分的开头和{{ randomgen_str }}我需要字符串的地方做。这不一定是坏事,我只是不知道是否有首选的方法来实现这一点。

谢谢

4

2 回答 2

1

多亏了 garromark,我才能找到最佳解决方案。分配标签正是我想要的。

@register.assignment_tag
def randomgen():
    return os.urandom(16).encode('hex')

然后在我的模板中,我可以在我包含的模板中使用以下内容

{% randomgen as randomgen_string %}

并在我需要随机字符串的地方使用以下内容

{{ randomgen_str }}
于 2012-12-04T21:12:50.710 回答
0

如果您包含的模板被包装到包含标签中,那么您可以在呈现模板之前修改上下文。

例如,假设现在您只是为以下内容做一个简单的模板包含template.html

{% include "templates/template.html" %}

这可以包装成一个模板标签,如:

@register.inclusion_tag("templates/template.html", takes_context=True)
def render_my_template(context):
    context['randomgen_str'] = os.urandom(16).encode('hex')
    return context

这将使您可以访问原始视图上下文template.html并将添加,randomgen_str以便您可以像以前一样访问。然后{% include %},您将调用{% render_my_template %}.

于 2012-12-02T16:52:03.493 回答