在两个模板块中获取相同的上下文变量

时间:2012-07-02 13:01:21

标签: python django templatetags

我有一个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 %}

那么..如何在其他地方'保存'初始结果,然后回想一下,如果它已经在通话中早先生成了?

由于

2 个答案:

答案 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个号码,然后在模板中的任意位置使用该号码。