我有一个django模板标签,用于设置一个上下文变量(它从模型中获取一个随机图像,但是对于这个例子,假设它得到一个随机数)
{% get_random_number %}
{{ my_random_number }} <!-- outputs a random number between 1 and 10 -->
这很好用。
但是我需要在我的页面中的两个不同的块中获得相同的“随机”数字:
{% block block1 %}
{% get_random_number %}
{{ my_random_number }} <!-- outputs a random number between 1 and 10 -->
{% endblock %}
{% block block2 %}
{% get_random_number %}
{{ my_random_number }} <!-- outputs a random number between 1 and 10 -->
{% endblock %}
这显然不起作用,因为我得到两个不同的结果(除非偶然,它们是相同的!)
那么如何使用templatetag设置一个跨两个模板块一致的上下文变量?
这样做不起作用 - 上下文变量仅限于在...中创建的块
{% get_random_number %}
{% block block1 %}
{{ my_random_number }}
{% endblock %}
{% block block2 %}
{{ my_random_number }}
{% endblock %}
那么..如何在其他地方'保存'初始结果,然后回想一下,如果它已经在通话中早先生成了?
由于
答案 0 :(得分:4)
您可以使用{% with %}
代码
{% with my_random_number=get_random_number %}
{% block block1 %}
{{ my_random_number }}
{% endblock %}
{% block block2 %}
{{ my_random_number }}
{% endblock %}
{% endwith %}
答案 1 :(得分:1)
您可以将模板标记逻辑移动到视图中。在您的视图中,您只需要拨打get_random_number
获取1个号码,然后在模板中的任意位置使用该号码。