我正在使用以下代码进行渲染" login.html"用" context"并将消息发送到模板但它不起作用。
messages.warning(request, 'Wrong Credentials.')
return HttpResponseRedirect(reverse('login') )
views.py:
from django.contrib import messages
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
if access_token:
"do something"
else:
messages.error(request,"Wrong credentials")
return HttpResponseRedirect(reverse(login))
的login.html:
{% if messages %}
{% for msg in messages %}
<div class="alert alert-{{msg.tags}} page-alert" style="text-align:center">
<button type="button" class="close" data-dismiss='alert'><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
{{msg}}
</div>
{% endfor %}
{% endif %}
答案 0 :(得分:0)
创建消息时,使用您使用的storage backend存储消息。默认的FallbackStorage
后端将消息存储在cookie或会话中。
因此,当您尝试重定向到新URL时,不需要包含任何上下文。您可以将代码更改为:
messages.warning(request, 'Wrong Credentials.') # No need to assign result to a variable
return HttpResponseRedirect(reverse('login') )
您可以使用redirect
快捷方式简化此操作:
from django.shortcut import redirect
messages.warning(request, 'Wrong Credentials.')
return redirect('login')
答案 1 :(得分:0)
如果要向reverse
添加参数,请像这样使用
return HttpResponseRedirect(reverse('login',kwargs={'key','value'}))
# the kwargs arguments should be set up in your url patterns
但在你的情况下,我不确定你想要什么。您不需要使用参数重定向到网址。只需使用HttpResponseRedirect(reverse('login'))
或更好,redirect('login_name')
,其中login_name是您的网址名称。
向模板发送消息
messages.warning(request, 'Wrong Credentials.')
# another way
messages.add_message(request,messages.WARNING,'Wrong Credentials.',extra_tags='more_tags_here')
从模板中获取消息 more info
使用bootstrap设计
{% if messages %}
{% for msg in messages %}
<div class="alert alert-{{msg.tags}} page-alert" style="text-align:center">
<button type="button" class="close" data-dismiss='alert'><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
{{msg}}
</div>
{% endfor %}
{% endif %}