Доступ к переменной из тега шаблона, который принимает аргументы

У меня есть шаблонные теги, которые принимают ID шаблона и возвращают список, я хочу проверить список, если переменная доступна, и сделать вход checkbox отмеченным.

`_checkbox.html`
{% load get_previous_response %}

{% user_response question.id %} {# this returns a list of ids #}

So I want to do something like this

<input type="checkbox" {% if option.id in user_response %}checked{% endif %}>
problem is the above won't work, I tried django templatetag `with template context`

My main goal is I want to access the list returned by {% user_response question.id %}.

Вы можете попробовать:

{% if option.id in user_response %}
   <input type="checkbox" checked>
{% else %}
   <input type="checkbox">
{% endif %}

Я думаю, что есть несколько способов достичь этого.

  1. Из документации django о простых тегах:

Можно хранить результаты тега в переменной шаблона, а не выводить их напрямую. Для этого используется аргумент as, за которым следует имя переменной. Это позволит вам самостоятельно выводить содержимое там, где вы считаете нужным

.

В вашем случае это было бы примерно так:

{% user_response question.id as user_responses %}

  1. Другим подходом было бы добавить список в контекст запроса, и обращаться к нему оттуда. Недостатком является то, что это будет доступно во всех ваших шаблонах (что, я думаю, не то, чего вы хотите). Смотрите этот ответ SO о том, как это сделать.

  2. Воплотите класс Templatetag и установите контекст в методе render. Вот документация Django о том, как это сделать: https://docs.djangoproject.com/en/3.2/howto/custom-template-tags/#setting-a-variable-in-the-context

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