classinfo = EventType.objects.all()
length = EventType.objects.all().count()
for i in range(length):
messages.success(request, classinfo[i])
そこで、これを使用して、EventTypeにあるすべてのイベントのリストを印刷しています。
これはどのように見えるかです。 ただし、クラスの追加機能を使用してリストに別のアイテムを追加すると、元のリストが再度繰り返され、追加のイベントが追加されます。ただし、この後に別のイベントを追加すると、リストに適切に追加されます。イベントを追加するときに最初のリストを繰り返さないように、どうすれば修正できますか?
HTMLは次のようになります。
{% for message in messages %}
<li>
{{ message }}
</li>
{% endfor %}
回答:
回答№1は0デフォルトでは、DjangoはFallbackStorageクラスを使用します。つまり、最初にCookieStorageを使用してメッセージを保存します。 Cookieが2KBを超えない限り、すべてのメッセージがCookieに保存されます。あなたがしているのは、リクエストを実行するときにメッセージを作成することです。これらのメッセージはすべてクッキーに保存されます。次に、イベントを追加して、別のリクエストを作成します。その後、ビューはすべてのEventTypeを再度ループし、最初の要求からのCookieの元のコンテンツと共にCookieに追加します。適切に、おそらくあなたはクッキーのサイズ制限にあり、既存のコンテンツをドロップします。
本当にメッセージを保存する必要がありますか? メッセージはロギングメカニズムとして使用されます。モデルを反復処理するためにメッセージを使用していますが、これは不要です。 classinfoをコンテキストディクショナリに渡し、メッセージの代わりにそれを反復処理するだけです。
view.py:
classinfo = EventType.objects.all()
template.html:
{% for event in classinfo %}
<li>{{ event }}</li>
{% endfor %}
さらに良いのは、単にDjangoのListViewを使用することです。まさにこれが目的です。
class EventListView(ListView):
model = EventType