【问题标题】:Django identifying non field validation error is associated with which formDjango识别非字段验证错误与哪个表单相关联
【发布时间】:2011-11-25 05:08:44
【问题描述】:

有没有办法确定验证错误与包含多个表单的模板的哪个表单相关联?

让我解释一下这个场景。我的 base.html 中有登录窗口弹出脚本

<div id="dialog1" class="window">
    <form method="post" action="/accounts/login/?next=/IW/home" id='login-form' name=login-form>{% csrf_token %}

            <div class="d-header">


                {{ form.non_field_errors }} 
                    <input type="text" name="username" id="id_username" value="" onclick="this.value=''"/><br/>
                    <input type="password" name="password" id="id_password" value="" onclick="this.value=''"/><br/>
                    <input type="hidden" name="login_form" value="1" />
                    <input type="submit" value="login" />   
            </div>          
                {% endif %} 
            </div>

    </form>
    </div>

<div id="mask"></div>
{% if form.non_field_errors %}
<script>
var maskHeight = $(document).height();
var maskWidth = $(window).width();
//Set heigth and width to mask to fill up the whole screen
$('#mask').css({'width':maskWidth,'height':maskHeight});
$('#mask').show();$('.window').show();

</script>
{% endif %}

由于所有其他模板都扩展了 base,html,只要出现错误 non_field 错误,就会弹出登录窗口。我只想在登录表单提交时才显示登录错误,而不是在提交带有非字段错误的其他表单时显示登录错误。

为此,我需要识别表单的名称。类似于 {% ifequal form.form_name login_form %} - 显示登录错误。这可能吗??

【问题讨论】:

    标签: django


    【解决方案1】:

    它们对于模板中的名称“form”没有什么特别之处。它只是一个默认的上下文名称,您可以选择为您的表单命名任何您喜欢的名称。

    只需在您的上下文中以不同的方式命名表单:

    from django.http import Http404
    
    def detail(request, poll_id):
    
        # NOTE: This view code isn't really form processing code, just using it to show
        #       how you can pass different names into your template context.
    
        login_form = MyLoginForm()
        detail_form = MyDetailForm()
    
        try:
            p = Poll.objects.get(pk=poll_id)
        except Poll.DoesNotExist:
            raise Http404
    
        return render_to_response('polls/detail.html', {'poll': p, 'login_form': login_form, 'detail_form': detail_form})
    

    然后:

    <div id="dialog1" class="window">         
       <form method="post" action="/accounts/login/?next=/IW/home" id='login-form' name=login-form>
           {% csrf_token %}
           <div class="d-header">
                {{ login_form.non_field_errors }}
        .
        .
        .      
    

    另外,如果你想做多个相同表单类型的实例,请查看formsets

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2021-01-01
      • 1970-01-01
      • 2020-10-15
      • 2016-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多