私のdjangoテンプレートでは、「すべてのイベント」と「あなたのイベント」の2つのタブを作成しています。最初のタブではすべてのイベントを一覧表示し、2番目のタブではフィルタリングされたイベントのリスト(ユーザーが参加しているイベント)を取得します。djangoテンプレートでリストを2回繰り返します
これを行うには、同じリストで2回ループします。最初の反復はすべて良いですが、2番目の反復は何も出力しません。どうすれば修正できますか?
下記の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})
イベントモデル
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の値は何ですか? –
イテレータを反復子ではなくリストにする –
ビューを表示してください。 'event_zip'とは何ですか? –