Как использовать тег jinja внутри тега jinja - PullRequest
1 голос
/ 01 июля 2019

Это мой код:

{% if {{post.author.profile.image.url}} is None %}

Когда я запускаю этот код, я получаю сообщение об ошибке

Could not parse the remainder: '{{post.author.profile.image.url}}' from '{{post.author.profile.image.url}}'

Как это решить? И как использовать тег шаблона внутри тега шаблона

Ответы [ 3 ]

5 голосов
/ 01 июля 2019

Используйте значение выражения напрямую, вам не следует заключать его в фигурные скобки:

{% if post.author.profile.image.url is None %}
   ...
{% endif %}
0 голосов
/ 02 июля 2019

На первый вопрос уже ответили. По этому поводу:

А как использовать тег шаблона внутри тега шаблона

Краткий ответ: вы не можете. Длинный ответ: вы можете с помощью тега «назначение блока» (http://jinja.pocoo.org/docs/2.10/templates/#block-assignments):

{% set somevar %}
... any number of tags here {{ post.author.profile.image.url }} ...
{% endset %}
...
{% if somevar is None %} ... {% endif %}

Вы также можете (начиная с Jinja2 2.10) применить фильтр к назначению:

{% set somevar | default('Empty') %}
... any number of tags here {{ post.author.profile.image.url }} ...
{% endset %}
0 голосов
/ 01 июля 2019

abdusco уже ответил на первую часть вашего вопроса («как решить эту проблему»).

по второй части:

как использовать тег шаблона внутри тега шаблона

Простой ответ: вы не можете, точка. Почему это невозможно, становится достаточно очевидным, когда вы понимаете, как работает система шаблонов, и в любом случае это будет в основном бесполезно (если вы пытаетесь использовать тег внутри тега, значит, вы делаете это неправильно и есть лучший способ, действительно ).

NB: когда я говорю, что вы не можете вкладывать теги, я имею в виду, что вы не можете сделать это:

{% sometag arg={% some_other_tag %} %}

Теперь в вашем примере вы пытаетесь не «использовать тег внутри тега», а использовать контекстную переменную внутри тега, и это, конечно, 1017 * возможно (иначе язык шаблонов будет довольно сложно использовать), как показано в ответе abdusco. И вы также можете использовать выражения фильтра (применить фильтр к переменной контекста) здесь, то есть {% mytag some.variable|upper %}, по крайней мере, если тег шаблона правильно реализован.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...