Короче говоря: вы не можете устанавливать произвольные переменные в контексте. {% set key = value %}
просто устанавливает переменную с именем key
на заданное значение.
Причина в том, что Jinja2 компилирует шаблоны вплоть до кода Python. (Если вы хотите увидеть код, сгенерированный вашим шаблоном, загрузите скрипт по адресу http://ryshcate.leafstorm.us/paste/71c95831ca0f1d5 и передайте ему имя вашего шаблона.) Чтобы ускорить обработку, он создает локальные переменные для каждой переменной, которую вы используете в шаблоне ( только поиск переменной в контексте при первом ее обращении), в отличие от Django, который использует контекст для всех поисков переменных.
Чтобы правильно сгенерировать этот код, он должен иметь возможность отслеживать, какие локальные или глобальные переменные существуют в любой момент времени, поэтому он знает, когда искать в контексте. И установка случайных переменных не позволит этому работать, поэтому contextfunction
не разрешено изменять контекст, просто просмотрите его.
Что бы я сделал, вместо того, чтобы код, отображающий бизнес, был включенным шаблоном, был ли он макросом в другом шаблоне. Например, в businesses.html
:
{% macro show_businesses(businesses, new_promotions) %}
{# whatever you're displaying... #}
{% endmacro %}
А потом в вашем основном шаблоне:
{% from "businesses.html" import show_businesses %}
{% show_businesses(**businesses) %}
Или, что еще лучше, разделите их на два отдельных макроса - один для предприятий и один для новых рекламных акций. Вы можете увидеть множество интересных трюков с шаблонами на http://bitbucket.org/plurk/solace/src/tip/solace/templates/, и, конечно же, проверить документацию Jinja2 на http://jinja.pocoo.org/2/documentation/templates.