Django消息显示两次

时间:2011-03-23 05:11:46

标签: python django

我正在使用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 个答案:

答案 0 :(得分:2)

原来这是一个模板继承问题。仔细检查并确保在两个不同的模板中没有相同的块。

答案 1 :(得分:0)

this answer是一个不同的问题,但我遇到了这个问题,它帮助我解决了这个问题。

总而言之,可以将以下代码添加到settings.py中:

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

这会将邮件从存储在CookiesStorage中更改为SessionStorage,在某些情况下,SessionStorage更可靠,可以防止重复显示消息或根本不显示消息。