You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django搭建注册表单触发NoReverseMatch报错该如何解决?

1. 直接触发NoReverseMatch报错的根因

你在urls.py中给register路由配置了多余的<int:register>参数,但是register视图不需要接收该参数,且模板中调用{% url 'register' %}时也没有传参,因此匹配失败。
修复方法:修改urls.py的路由为无参数格式:

path("register/", views.register, name='register'),

2. views.py存在的多个逻辑错误

  • 缩进逻辑错误:当前else分支挂载在if user_form.is_valid()下,GET请求不会触发表单初始化逻辑
  • 密码设置错误:set_password是方法不是属性,且字段名拼写错误
    修复后代码:
def register(request):
    if request.method == "POST":
        user_form = UserRegistrationForm(request.POST)
        if user_form.is_valid():
            new_user = user_form.save(commit=False)
            new_user.set_password(user_form.cleaned_data['password'])
            new_user.save()
            return render(request, 'main/account/register_done.html', {'new_user': new_user})
    else:
        user_form = UserRegistrationForm()
    return render(request, "main/account/register.html", {'user_form': user_form})

3. forms.py存在的多个错误

  • Meta类缩进错误:当前和UserRegistrationForm平级,需要缩进为表单类的内部类
  • 字段名错误:Django内置User模型没有Username、Name、SurName字段,默认对应字段为username、first_name、last_name
  • 密码校验逻辑错误:对比密码时取值写法错误
    修复后代码:
from django.contrib.auth.models import User
from django import forms

class UserRegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)

    class Meta:
        model = User
        fields = ("username", "email", "first_name", "last_name")

    def clean_password2(self):
        cd = self.cleaned_data
        if cd['password'] != cd['password2']:
            raise forms.ValidationError("Password dont match")
        return cd["password2"]

4. base.html的冗余属性

a标签不需要加method="POST"属性,该属性仅适用于表单标签,直接删除即可:

<a class="me-3 py-2 text-dark text-decoration-none" href="{% url 'register' %}">Регистрация</a>

内容的提问来源于stack exchange,提问作者MihailCapone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:48:00