代码之家  ›  专栏  ›  技术社区  ›  Raahym Asif

Django消息重复自身而不是更新

  •  -2
  • Raahym Asif  · 技术社区  · 7 年前
    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 回复  |  直到 7 年前
        1
  •  1
  •   Joshua Schaeffer    7 年前

    默认情况下,Django使用FallBackstore类,这意味着它将首先使用CookieStorage来存储消息。只要您的cookie不超过2KB,它就会将您的所有消息存储在cookie中。您所做的是在运行请求时创建消息,所有这些消息都存储在cookie中。然后添加一个事件并发出另一个请求。然后,视图将再次遍历所有EventType,并将其与第一个请求中的cookie原始内容一起添加到cookie中。我不知道为什么当你第三次添加EventType时,它会正确地显示列表,也许你已经达到了cookie的大小限制,它会删除现有的内容。

    您真的需要存储邮件吗?消息用作日志记录机制。您正在使用消息对模型进行迭代,这是不必要的。只需将classinfo传递到您的上下文词典中,并对其进行迭代,而不是传递消息:

    看法py:

    classinfo = EventType.objects.all()
    

    样板html:

    {% for event in classinfo %}
    <li>{{ event }}</li>
    {% endfor %}
    

    更好的是,只需使用Django的ListView,这正是它的用途:

    class EventListView(ListView):
        model = EventType