Django 的闪存消息不起作用

1 投票
1 回答
2558 浏览
提问于 2025-04-18 07:14

我觉得我的设置可能有问题。当我在登录操作中使用闪现消息时,在首页模板中看不到这个消息;但是当我在“我的”操作中使用闪现消息时,却看到了消息的重复。

settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'debug_toolbar',
    'bookmarks',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

视图:

def login(request):
...
    if user is not None and user.is_active:
        auth.login(request, user)
        messages.add_message(request, messages.SUCCESS, 'cant see it')

        return redirect(reverse('bookmarks:index'))
...


def my(request):
...
    messages.add_message(request, messages.SUCCESS, 'this is twice')

    return render(request, 'bookmarks/my.html', {
        'bookmarks': bookmarks
    })

还有我的 index.html

{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

//编辑 可能是路由方面的问题?

urlpatterns = patterns('',
    url(r'^$', views.index, name = 'index'),
...
    url(r'^my/$', views.my, name = 'my'),
...
)

1 个回答

0

这些闪烁的消息只有在你显示一个页面的时候才会出现。

所以你看到两个消息的原因是:

  1. 你成功登录了,并设置了一条消息。
  2. 然后你被重定向到首页,消息系统记住了这条消息。
  3. 你的首页显示出来时,就会同时显示这两条消息。

撰写回答