Пользовательский тег шаблона не присваивается контексту {% с %}

Мне нужен пользовательский тег, в который можно передавать несколько аргументов с ключевыми словами для создания уникального идентификатора для данного экземпляра объекта. Независимо от того, какую строку возвращает тег, он присваивает ее в качестве контекстной переменной включенному шаблону. При этом контекстная переменная id остается пустой. В этом случае идентификаторы для элементов SVG возвращают только жестко закодированные строки upvote_ и downvote_.

Как исправить ситуацию, чтобы контекстная переменная id интерполировалась в строку атрибутов SVG id?

  • Примером может быть: upvote_queston101
{% for answer in question.answers.all %}
    {% include "./posted.html" with post=answer id=set_id question=question.id answer=answer.id %}
{% endfor %}
<div class="rating_box">
  <div class="vote">
    <svg id="upvote_{{ id }}" class="vote_button">

    </svg>
    <p>{{ post.score }}</p>
    <svg id="downvote_{{ id }}" class="vote_button">

    </svg>
  </div>
  <p class="post_body_content">{{ post.body }}</p>
</div>

from django import template

register = template.Library()

@register.simple_tag
def set_id(*args, **kwargs):
    if kwargs['question'] and kwargs['answer']:
        q_id, a_id = kwargs['question'], kwargs['answer']
        return f"question{q_id}_answer{a_id}"
    q_id = kwargs['question']
    return f"question{q_id}"

Попробуйте сделать его более пошаговым и назначить временную переменную для идентификаторов. Предположим, что существует некоторый конфликт с использованием знаков "=" в строке

{% for answer in question.answers.all %}

    {% set_id question=question.id answer=answer.id as ids %}
    {% include "./posted.html" with post=answer id=ids  %}

{% endfor %}
Вернуться на верх