#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