Skip to main content
 首页 » 编程设计

python之不显示输入字段的 Django 表单

2025年05月04日30tintown

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

目标:加载表单域并能够提交表单。

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

表单.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> 

我在这里做错了什么?我在本地处于 Debug模式时也没有收到任何错误。

谢谢!

请您参考如下方法:

你有两个错误。

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