识别非字段验证错误的Django与哪种形式相关联

时间:2011-11-25 05:08:44

标签: django

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

让我解释一下这个场景。我在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错误,则会弹出登录窗口。我想仅在登录表单提交时才显示登录错误,而不提交其他形式的非字段错误。

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

1 个答案:

答案 0 :(得分:0)

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

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

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