как объявить переменную в шаблоне django и изменить значение этой переменной в условии if?

#python #django #django-templates

#python #django #django-шаблоны

Вопрос:

Я пытаюсь добавить изображение профиля в шаблон django для комментариев к сообщению… Если изображения профиля нет в модели, то я хочу заменить его оформленным текстом вместо изображения. Но я начинаю беспокоиться о том, как сообщить шаблону django, существует ли изображение if или нет…

 <div class="comment-author">
{% for image in profile %}
    {% if image.profile|slugify == comment.author %}
        {% with "exist" as img %} <!-- if image exist create img variable -->
        <img src="{{ image.profileImg.url }}" alt="{{ image.profile }}">
    {% endif %}
{% endfor %}
{% if not img %} <!-- using img variable for checking -->
    <span class="userImg"><b>{{ comment.author|make_list|slice:':2'|join:'' }}</b></span>
{% endif %}
{% endwith %} <!-- closing the with statement -->
  

В приведенном выше коде я пытался создать переменную img, используя ‘with’, но получаю ошибку в шаблоне… Что мне с этим делать?

Комментарии:

1. Вставка ошибки в вопрос всегда полезна.

2. @webby Я знаю, что это будет ошибка с оператором ‘with… Я получаю ошибку в этой последней строке… Мой основной мотив заключается в том, как я могу объявить переменную перед выполнением условия if и инструкции ‘if’, а затем изменить значение .. и затем использовать ту же переменную, изменилось значение или нет…

3. Вы не можете этого сделать, и вам не следует пытаться. Скорее, вы должны реализовать метод в модели профиля, который возвращает правильные данные. (Невозможно ответить вам более полно, потому что в вашем коде много других проблем, таких как, например, вызов ваших профилей «image» и затем доступ к методу «profile» в этом профиле.)

4. Я погуглил эту проблему и нашел что-то вроде … создать функцию в представлениях, затем вернуть значение в шаблон… но я в замешательстве, как я могу это сделать?

Ответ №1:

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

 <div class="comment-author">
{% for image in profile %}
    {% if image.profile|slugify == comment.author %}
        {% with "exist" as img %} <!-- if image exist create img variable -->
        <img src="{{ image.profileImg.url }}" alt="{{ image.profile }}">

{% else %} <!-- using img variable for checking -->
    <span class="userImg"><b>{{ comment.author|make_list|slice:':2'|join:'' }}</b></span>
{% endif %}

{% endwith %} <!-- closing the with statement -->
{% endfor %}
  

Комментарии:

1. Я объявил endwith в последней строке

2. вы рано закрываете цикл for и перемещаете его на последнюю строку

3. С этим обновлением все профили будут отображаться для одного и того же комментария… либо изображение, либо стилизованный текст

4. проблема может заключаться в вашем условии оператора if