关于Django中用户注册表单的问题

时间:2012-12-04 13:09:29

标签: python html django

好的,我有这个HTML表单:

<form class="form" action="" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" value="register">Login</button>
</form>

这个Django观点:

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response
from django.template import RequestContext

    def register(request):
        if request.method == 'POST':
            form = UserCreationForm(request.POST)
            if form.is_valid():
                new_user = form.save()
                return HttpResponseRedirect("/success/")
        else:
            form = UserCreationForm()
        return render_to_response("signup.html", {'form': form,}, RequestContext(request))

这完全没问题。但我希望能够更多地定制原始形式。因此,为了尝试找出如何做到这一点,我首先看一下form.as_p函数的源代码,然后尝试手动复制它。我最终得到了这个:

<form class="form" action="" method="post">
    {% csrf_token %}
    <p>
        <label for="id_username">Username:</label>
        <input id="id_username" type="text" name="username" maxlength="30">
    </p>

    <p>
        <label for="id_password1">Password:</label>
        <input type="password" name="password1" id="id_password">
    </p>

    <p>
        <label for="id_password2">Password confirmation:</label>
        <input type="password" name="password2" id="id_password2">
    </p>

    <button type="submit" value="register">Login</button>
</form>

然而,这不起作用。我不明白为什么不这样做。如果form.as_p具有以上作为输出,那么它理论上应该可以正常工作视图不应该吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的模板错过了两件事:任何表单或字段错误,以及字段的任何预先填充的值。显而易见的是,is_valid确实是错误的,但你没有显示任何错误。

您应该使用模板变量:

,而不是对HTML中的字段进行硬编码
{{ form.non_field_errors }}
...
<p>
{{ form.username.label_tag }}
{{ form.username }}
{{ form.username.errors }}
</p>