我有一个登录模板,我想传递"无效的凭据" Django中带有该模板的消息

时间:2018-04-24 12:38:15

标签: html django

我正在使用以下代码进行渲染" 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 %} 

2 个答案:

答案 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 %}