将随机字符串添加到模板上下文的简单方法

时间:2012-12-02 16:36:54

标签: django django-templates

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

我目前正在将其添加到上下文

@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 }}我需要字符串的地方。这不一定是坏事,我只是不知道是否有一种首选的方法来实现这一点。

由于

2 个答案:

答案 0 :(得分:1)

感谢garromark,我找到了最佳解决方案。作业标签完全符合我的要求。

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

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

{% randomgen as randomgen_string %}

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

{{ randomgen_str }}

答案 1 :(得分: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 %}