Шаблоны Django позволяют включать другие шаблоны для составления вашей страницы. Это особенно полезно, если вы хотите отобразить всю страницу, но можете захотеть повторно загрузить ее часть с помощью AJAX и не хотите перемещать всю визуализацию в javascript (или, что еще хуже: дублировать его в javascript).Как использовать csrf_token в шаблоне django, включенном с ограниченным контекстом
В том числе шаблона может выглядеть следующим образом:
{% include "template.html" %}
Однако, если этот шаблон может быть использован различными видами, вполне вероятно, что ваш контекст не только надстройка контекста для этого шаблона. Поэтому Django позволяет указать контекст для шаблона.
Поскольку я хочу избежать случайного введения различного поведения, когда шаблон визуализируется путем включения в другой шаблон, и когда шаблон отображается в качестве основного шаблона для представления, мне также имеет смысл использовать опцию only
чтобы избежать доступа к контексту родительского шаблона.
Так мой включают выглядит следующим образом:
{% include "sub_template.html" foo=sub_context.foo bar=sub_context.bar only %}
Однако, добавив, что only
вызывает проблему: {% csrf_token %}
больше не работает в этом шаблоне, потому что я думаю, некоторые из скрытых магии, что делает Django был исключен.
Ошибка, которая регистрирует Джанго является
UserWarning: А {% csrf_token%} использовали в качестве матрицы, но контекст не предусматривает значение. Обычно это вызвано не использованием RequestContext.
Родительский шаблон является визуализации с RequestContext
, а когда шаблон суб визуализируется в качестве основного шаблона, и не включается, не возникает ошибка.
Наиболее очевидным решением этой проблемы является не использование опции only
для include
, что кажется стыдом. Есть ли лучший способ решить эту проблему?