В моем шаблоне django я создаю две вкладки - «Все события» и «Ваши события». На первой вкладке я хочу перечислить все события и на второй вкладке хочу иметь отфильтрованный список событий (события, которые пользователь посещает).Итерация по списку дважды в шаблоне django
Для этого я дважды перебираю один и тот же список. Первая итерация - все хорошо, но вторая не дает никакого выхода. Как я могу это исправить?
Опубликовать мой html-шаблон ниже.
{% block content%}
<ul class="nav nav-tabs" style="padding-top: 60px">
<li class="active"><a data-toggle="tab" href="#allevents">All events</a></li>
<li class=""><a data-toggle="tab" href="#yourevents">Your events</a></li>
</ul>
<div class="container-fluid">
<h1>Event list</h1>
</div>
<div class="tab-content">
<div id="allevents" class="tab-pane fade in active">
{% for event, is_att in event_zip %}
<p> {{ event.name }} </p>
DISPLAY ALL EVENTS HERE - displays correctly
{% endfor %}
</div>
<div id="yourevents" class="tab-pane fade">
{% for event, is_att in event_zip %}
<!-- {% if is_att %} -->
<p> {{ event.name }} </p>
DISPLAY FILTERED EVENTS HERE - doesn't give any output
Does not work even with 'if' statement commented out.
<!-- {% endif %} -->
{% endfor %}
</div>
</div>
{% endblock %}
views.py
@login_required
def events(request):
user = request.user
event_list = Event.objects.all().order_by('date')
is_att = []
for e in event_list:
ev = get_object_or_404(Event, pk=e.id)
if user in ev.list_of_users.all():
is_att.append(True)
else:
is_att.append(False)
event_zip = zip(event_list, is_att)
if request.POST.get('join'):
event_id = request.POST['join']
event_to_join = get_object_or_404(Event, pk=event_id)
event_to_join.list_of_users.add(user)
return HttpResponseRedirect(reverse('events'))
if request.POST.get('leave'):
event_id = request.POST['leave']
event_to_leave = get_object_or_404(Event, pk=event_id)
event_to_leave.list_of_users.remove(user)
return HttpResponseRedirect(reverse('events'))
return render(request, 'events/events.html', {'event_zip' : event_zip})
модель Event
class Event(models.Model):
name = models.CharField(max_length=50, blank=False, unique=True)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
date = models.DateTimeField(blank=False)
place = models.CharField(max_length=50, blank=False)
list_of_users = models.ManyToManyField(User, related_name='user_list', blank=True)
@property
def is_in_future(self):
return self.date > timezone.now()
def __str__(self):
return self.name
Каково значение 'is_att'? –
Сделать isat список вместо итератора –
Пожалуйста, покажите представление. Что такое 'event_zip'? –