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

Posted

技术标签:

【中文标题】显示没有输入字段的 Django 表单【英文标题】:Django Form Showing No Input Fields 【发布时间】:2013-09-19 08:13:35 【问题描述】:

我在请求表单时收到了有效的回复,但我没有收到包含回复的表单字段。它正在加载仅提交按钮,但没有加载表单字段。

目标:让表单字段加载并能够提交表单。

我有一个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>

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

谢谢!

【问题讨论】:

回答完问题后不要编辑您的问题...... 【参考方案1】:

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

您应该改用 form.as_p

【讨论】:

【参考方案2】:

你有两个错误。

首先,您将表单类传递给模板上下文,而不是表单实例:该类是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 
)

【讨论】:

你能告诉我我在代码中做错了什么吗?我真的很感激丹尼尔 这非常容易理解丹尼尔。 PEP8 命名的好主意,我以后必须记住这一点。谢谢! 非常感谢您!我犯了与 OP 类似的错误,这确实有助于澄清!

以上是关于显示没有输入字段的 Django 表单的主要内容,如果未能解决你的问题,请参考以下文章

有没有一种简单的方法来更改 Django 表单的日期时间输入字段的格式?

使用 django 和 ajax 显示表单错误

将 twitter 引导程序与 Django 表单一起使用

Django 表单输入字段样式

django - 动态添加 django 表单字段并保留用户输入

Django - 自定义表单,特别是字段的外观