尝试了很多东西,但没有一个真正有帮助。
我有一个URL
例子:
它调用以下内容view
:
def edit_transaction(request):
if request.method == "POST":
if something is True:
messages.error(request, 'Error message here')
# this don't work
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
# but this work
template = "user/xyz/abc.html"
render(request, template)
else:
return HttpResponseNotFound()
else:
context = {
'key1': 'value1',
'key2': 'value2',
}
template = "user/xyz/abc.html"
render(request, template, context)
和内部模板:
{% if messages %}
<h1>I am inside MESSAGES</h1>
{% for message in messages %}
{% if message.tags == 'success' %}
<div class="alert alert-success" role="alert">{{ message|escape|safe }}</div>
{% elif message.tags == 'error' %}
<div class="alert alert-danger" role="alert">{{ message|escape|safe }}</div>
{% endif %}
{% endfor %}
{% endif %}
它进入if
这里if something is True:
并被重定向到与查询字符串相同的页面。但不显示错误消息。
我想要的是重定向到保留查询字符串的同一页面并显示错误消息。我在这里做错了什么以及建议进行哪些更改(如果有)。
还有一个疑问,Django 消息在重定向后真的像 Flash 消息一样有效吗?
编辑:
1)这不起作用:
if something is True:
messages.error(request, 'Error message here')
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
从控制台:
[16/Sep/2015 10:57:08]“POST /user/edit-transaction/?object_id=23a959d0561711e59e36acd1b8679265&type=grossary HTTP/1.1”302 0 [16/Sep/2015 10:57:08]“GET /user/编辑事务/?object_id=23a959d0561711e59e36acd1b8679265&type=grossary HTTP/1.1" 200 8832
2)这有效:
if something is True:
messages.error(request, 'Error message here')
template = "user/xyz/abc.html"
render(request, template)
从控制台:
[16/Sep/2015 10:57:08]“POST /user/edit-transaction/?object_id=23a959d0561711e59e36acd1b8679265&type=grossary HTTP/1.1”302 0
所以,基本上我从上面了解到的messages
是,随着额外的请求(重定向,200)而过期。
{% if messages %}
在模板中,打印也没有进入<h1>I am inside MESSAGES</h1>