【问题标题】:How to display multiple django messages in one page?如何在一页中显示多条 django 消息?
【发布时间】:2013-02-07 16:31:48
【问题描述】:

在我的主页中,我有一个登录表单和注册表单,我使用 form.is_valid() 来验证表单,

但不是

return render(request,'registration/login.html', {'form': form})

我用

messages.error(request, 'username or password wrong.')
return redirect('/')

我这样做是因为

return render(request,'registration/login.html', {'form': form})

form.is_valid()失败后,刷新页面会弹出resubmit Confirm,我不要这个,所以我用第二种方法。

问题是有两种形式:登录和注册,我不能把错误信息放在一个地方,那样会误导,那么如何在一页显示两条信息呢?

【问题讨论】:

    标签: python django forms message


    【解决方案1】:

    您可以使用extra_tags 来自消息框架的消息来识别两条不同的消息。

    例如,对于登录错误

    messages.error(request, 'username or password wrong.', extra_tags='login')
    

    对于注册错误,

    messages.error(request, 'username or password wrong.', extra_tags='signup')
    

    然后根据标签在模板中以适当的形式放置消息

    {# login form #}
    {%for message in messages %}
         {%if "login" in message.tags %}
              <p> {{message}} </p>   {# show login error message #}
         {%endif%}
    {%endfor%}
    
    {# signup form #}
    {%for message in messages %}
         {%if "signup" in message.tags %}
              <p> {{message}} </p>   {# show signup error message #}
         {%endif%}
    {%endfor%}
    

    更多参考Adding extra message tags

    【讨论】:

      【解决方案2】:

      您可以使用 form.errors dict,他存储字段名称和错误消息,以防表单无效,例如:

      >>> print form.errors
      {'password': [u'This field is required']}
      

      然后你可以在你的模板中使用:

      {% if 'username' in form.errors.keys %}
          <div class="error-message">
              Your username input error message!
          </div>
      {% endif %}
      {% if 'password' in form.errors.keys %}
          <div class="error-message">
              Your password input error message!
          </div>
      {% endif %}
      

      我能看到的唯一问题是输出消息,她有点丑=] 但是你可以使用其他技巧来使它更漂亮,比如使用其他字典来存储漂亮的消息并通过字段名称获取他......你做出这个选择。

      *抱歉我的英语不好;/

      【讨论】:

      • 好吧form.error很好,但是正如我在is_valid失败后提到的,刷新页面会弹出一个确认框,确认重新提交表单,我真的不想要这个。
      • 哦,好吧,你想好把这个逻辑留在客户端吗?!或者一个 jquery 脚本来验证 html-forms,也许还有一个 ajax。
      • 不,我仍然使用 form.is_valid() 来验证表单,但我使用 django 消息框架而不是 form.errors,以通知用户
      猜你喜欢
      • 2017-11-24
      • 1970-01-01
      • 2017-02-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2013-11-15
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多