Request.user недоступен в подшаблоне Streamblocks

В моем главном шаблоне я могу вызвать:

{% load static wagtailuserbar wagtailcore_tags %}
{% load navigation_tags %}

{% if request.user.is_authenticated %}
You're logged in
{% endif %}

но если я вызываю это в моем подшаблоне StreamBlock, это не работает.

{% load wagtailcore_tags wagtailimages_tags %}

{% if request.user.is_authenticated %}
<div class="container">
...
</div>
{% endif %}

Any ideas?

При выводе StreamField на страницу обязательно используйте тег include_block, а не просто выводите значение в теге {{ ... }}. Это гарантирует, что все переменные, определенные во внешнем шаблоне, включая request, будут переданы в подшаблон. Если вы используете {{ ... }}, то подшаблон все равно будет выведен, но единственными доступными переменными будут те, которые предоставлены самим блоком.

{% include_block %} можно использовать как для отдельного блока, так и для потока в целом:

{% load wagtailcore_tags %}

{% include_block page.body %}

or

{% for block in page.body %}
    {% include_block block %}
{% endfor %}

Вам также потребуется сделать это в любых подшаблонах, которые отображают подшаблоны (например, если у вас есть вложенный StreamBlock внутри StreamField, шаблон для этого StreamBlock также должен использовать include_block).

Вернуться на верх