Как изменить существующую переменную в шаблоне django

#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 %}