#python #django
#python #django
Вопрос:
Новичок в Django здесь и нуждается в некоторой помощи. У меня есть переменная bool empty = True. Я успешно передал переменную через views в свой шаблон. В шаблоне у меня есть цикл while, который включает оператор if / else. Мне нужно иметь возможность изменить мою переменную на False, если она соответствует условию в операторе if. Как только я выхожу из цикла, появляется другой оператор if / else для проверки, что значение empty равно True.
Кажется, я не могу понять, как изменить переменную в шаблоне.
Я попробовал оператор with для изменения переменной, но у меня это не сработало корректно, потому что я должен завершить оператор with до завершения цикла. Как только оператор with завершается, переменная возвращается к своему’ исходному значению
Просмотры — «‘
def myProjects(request):
user = request.user
projects = Project.objects.all() #from db
empty=True
return render(request,'users/myProjects.html',locals())
»’
Шаблон —
«‘
<div class="row" id="main1">
<div class="col-2"></div>
<div class="col-9">
<div>
<h1>My Projects: </h1>
{% for x in proj %}
{% if x.creator.user == me %}
<div class="media1">
<img class="account-img" src="{{x.projectPicture.url}}">
<div>
<h5><strong>Project Name: {{x.projectName}}</strong></h5>
<p>Project Type: {{x.projectType}}</p>
<p>Creator: <a href="/allUsers?name1={{x.creator.user}}"> {{x.creator.user}} </a></p>
<p class="text-muted small">Created: {{x.dateTime}}</p>
</div>
</div>
{{empty=False}}
{% else %}
{{pass}}
{% endif %}
{% if empty==True %}
<p>You do not have any projects</p>
{% else %}
{{pass}}
{% endif %}
{% endfor %}
</div>
</div>
</div>
{% endblock%}
»’
Комментарии:
1. Что вы пробовали? Некоторый код сделает вопрос более понятным и с большей вероятностью получит ответ.
2. Пожалуйста, включите некоторый код, мне кажется, что самым простым подходом было бы изменить дизайн, с чем мы могли бы вам помочь.
3. Даже если вы можете найти способ установить переменную, это плохой дизайн. Почему бы вам просто не передать соответствующие проекты в шаблон? Таким образом, вам не придется перебирать все проекты, чтобы увидеть, принадлежат ли они пользователю. Вы должны реализовать большую часть логики в своих представлениях и выполнить простое форматирование макета в своих шаблонах.
4. Все еще пытаюсь привыкнуть к Джанго, теперь я понимаю.
Ответ №1:
Установка значений переменных в шаблонах противоречит философии дизайна Django. Система шаблонов предназначена для того, чтобы отделять логику от представления и не быть языком программирования.
Чтобы добиться того, что вы пытаетесь сделать, вы могли бы сначала отфильтровать проекты в представлении, а затем использовать тег for …empty. Ваш пример стал бы чем-то вроде следующего:
{% for project in projects_created_by_me %}
<p>Project Name: {{project.projectName}}</p>
{% empty %}
<p>You do not have any projects</p>
{% endfor %}