我有一个部分模板,每次包含它时都需要一个随机字符串。我需要访问相同的随机字符串而不是每个包含一次,我不确定部分将被包括多少次。
我目前正在将其添加到上下文
@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 }}
我需要字符串的地方。这不一定是坏事,我只是不知道是否有一种首选的方法来实现这一点。
由于
答案 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 %}