【问题标题】:Django messages repeating itself instead of updatingDjango 消息重复而不是更新
【发布时间】:2018-09-07 14:34:53
【问题描述】:
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 %}

【问题讨论】:

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


    【解决方案1】:

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

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

    view.py:

    classinfo = EventType.objects.all()
    

    模板.html:

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

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

    class EventListView(ListView):
        model = EventType
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 2015-01-17
      • 1970-01-01
      • 2018-06-21
      • 2021-12-18
      • 2018-11-15
      • 1970-01-01
      相关资源
      最近更新 更多