显示没有输入字段的Django表单

时间:2013-09-14 21:40:05

标签: python django forms django-templates

我在申请表单时收到了有效回复,但我没有收到回复的表单字段。它只加载提交按钮,但没有加载表单字段。

目标:获取表单字段以加载并能够提交表单。

我有一个 views.py

 def Registration(request):
    form = NewUserRegistrationForm(request.POST or None)
    if request.method == 'POST':
        if form.is_valid():
            form.save()
            return HttpResponseRedirect("/Login/")
    else:
        form = NewUserRegistrationForm()

    return render(request, 'VA/reuse/register.html', {
        'form': form 
    })

forms.py

class NewUserRegistrationForm(UserCreationForm):
    username = forms.CharField(required=True,max_length=30,validators=[RegexValidator('^[A-Za-z0-9]{1,30}$','e.g. must be 30 characters or less','Invalid Entry')])
    email = forms.EmailField(required=True, max_length=75)
    password = forms.PasswordInput()
    class Meta:
        model = User
        fields = ("username", "email", "password1","password2")

def save(self, commit=True):
    user = super(NewUserRegistrationForm, self).save(commit=False)
    user.username = self.cleaned_data["username"]
    user.email = self.cleaned_data["email"]
    user.password = self.cleaned_data["password1"]
    if commit:
        user.save()
    return user

模板

<div id="register_bubble">
    <form method="post" id="userRegistration">
        {% csrf_token %}
        {{ NewUserRegForm.as_p }}
        <input type="submit" value="Submit" />
    </form> <!-- /RegistrationForm (FORM) -->
</div>

我在这里做错了什么?在本地调试模式下,我没有收到任何错误。

谢谢!

2 个答案:

答案 0 :(得分:6)

你有两个错误。

首先,您将表单类传递给模板上下文,而不是表单实例:类是NewUserRegistrationForm,但您已将其实例化为NewUserRegForm,这就是您应该成为的作为表单上下文中的值传递。

为了使其更复杂,您为该值提供的键名也是NewUserRegistrationForm - 但您仍然在模板中引用NewUserRegForm,即使该名称不存在那里。

如果您使用符合PEP8的名称,这将更加明显。实例应该是带有下划线的小写:例如new_user_registration_form。但是,在这种情况下,您可以将其称为form,因为只有一个。

return render(request, 'mysite/reuse/register.html', {
    'NewUserRegForm': NewUserRegForm 
})

或者,更好:

form = NewUserRegistrationForm(request.POST or None)
...
return render(request, 'mysite/reuse/register.html', {
    'form': form 
})

答案 1 :(得分:3)

您将表单实例作为'form'传递给上下文,但在模板中将其称为{{ NewUserRegForm.as_p }}

您应该使用{{ form.as_p }}代替。