Django消息重复而不是更新

时间:2018-03-28 19:14:02

标签: python django django-models django-templates django-views

classinfo = EventType.objects.all()
length = EventType.objects.all().count()
for i in range(length):
    messages.success(request, classinfo[i])

所以我使用它来打印出EventType中所有事件的列表。

Image

这就是它的样子。但是,当我使用“类添加”功能向列表中添加另一个项目时,它会再次重复原始列表,然后添加其他事件。但是,如果我在此之后再添加一个其他事件,它会将其正确添加到列表中。我如何解决此问题,以便在添加活动时不重复初始列表?

How it looks right now when I add an event

这就是HTML的样子:

{% for message in messages %}
<li>
{{ message }}
</li>
{% endfor %}

1 个答案:

答案 0 :(得分:1)

默认情况下,Django使用FallbackStorage类,这意味着它将首先使用CookieStorage存储您的消息。只要您的cookie不超过2KB,它就会将您的所有消息存储在cookie中。您正在做的是在运行请求时创建消息,所有这些消息都存储在cookie中。然后,您添加一个事件并发出另一个请求。然后,视图将再次循环遍历所有EventType,并将其与第一个请求中的cookie的原始内容一起添加到cookie中。我不知道为什么当你第三次添加一个EventType时它正确地显示了列表,也许你处于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