Django消息显示两次

3 投票
2 回答
3372 浏览
提问于 2025-04-16 14:14

我在使用Django的消息框架时遇到了一个奇怪的问题,虽然{{messages|length}}的值是1,但我的消息在模板中却显示了两次。

这是我的视图代码:

if request.method == 'POST':
    form = EditProfileForm(user=request.user, meta=meta, data=request.POST, files=request.FILES)
    if form.is_valid():
        user = form.save()
        if 'uploaded_image' in request.FILES:
            #TODO limit image size, check mime type
            filename = request.FILES['uploaded_image']
            destination = open('%s/%s' % (settings.FILE_UPLOAD_PATH, form.filename), 'wb+')
            for chunk in filename.chunks():
                destination.write(chunk)
            destination.close() 

        print 'adding success message' #this is printed once
        messages.success(request, 'Settings saved.') #this message is displayed twice
        #messages.add_message(request, messages.SUCCESS, 'Yup. Saved.')

        return HttpResponseRedirect(reverse('someview'))
    else:
        print form.errors
        messages.error(request, 'Error updating settings. See errors below.')

在我的模板中:

{% block message%}
{{message.count}}
{% if messages %}
{{messages|length}}
    {% for message in messages%}
        <p class="{{message.tags}}">{{message}}</p>
    {% endfor %}
{% endif %}
{% endblock %}

有没有什么想法?

2 个回答

2

虽然这个回答是针对另一个问题的,但我遇到过类似的问题,这个回答帮我解决了。

简单来说,可以在settings.py文件中添加以下代码:

MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'

这段代码的作用是把信息的存储方式从CookiesStorage改成SessionStorage。在某些情况下,这样做更可靠,可以避免信息重复显示或者根本不显示的问题。

4

原来这是个模板继承的问题。你需要仔细检查一下,确保在两个不同的模板里没有相同的代码块。

撰写回答