我正在使用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 %}
有什么想法吗?
答案 0 :(得分:2)
原来这是一个模板继承问题。仔细检查并确保在两个不同的模板中没有相同的块。
答案 1 :(得分:0)
this answer是一个不同的问题,但我遇到了这个问题,它帮助我解决了这个问题。
总而言之,可以将以下代码添加到settings.py中:
MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage'
这会将邮件从存储在CookiesStorage中更改为SessionStorage,在某些情况下,SessionStorage更可靠,可以防止重复显示消息或根本不显示消息。