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

Django NoReverseMatch错误:表单无法识别create_user_view视图

解决Django中NoReverseMatch错误的方案

核心问题:URL未命名导致反向解析失败

你的urls.py里create_user_view对应的路径没有设置name属性,Django模板中的{% url %}标签依赖URL的name来完成反向解析,所以才会提示视图无效。

具体修复步骤

1. 给URL添加name属性

修改urls.py,为每个路径补充name,尤其是create_user_view:

from django.contrib import admin
from django.urls import path

from personal.views import(
    home_screen_view, login_view, create_user_view,
    )

urlpatterns = [
    path("admin/", admin.site.urls),
    path("", home_screen_view, name="home"),
    path("login.html/", login_view, name="login"),
    path("create_user_view/", create_user_view, name="create_user_view"),  # 添加name属性
]

2. 修复表单提交的冲突问题

表单内的提交按钮设置了formaction="logbook.html",这会覆盖表单的action属性,导致提交路径错误,直接删除该属性;同时提交按钮的文本应该用value而非placeholder:

<input type="submit" name="submit" class="max" value="SUBMIT" id="submitid">

3. 处理redirect的缺失URL问题

create_user_view中return redirect('success')引用的success没有对应的URL配置,有两种解决方式:

  • 方式一:添加success视图和URL
    在views.py中新增视图:
    def success_view(request):
        return render(request, "personal/success.html")
    
    然后在urls.py中补充路径:
    path("success/", success_view, name="success"),
    
  • 方式二:直接跳转到首页(如果不需要单独的success页面)
    把return redirect('success')改成return redirect('home')(前提是首页URL已经设置了name="home")

4. 补充CSRF令牌

Django的POST表单必须包含CSRF令牌来防止跨站伪造请求,在表单内部添加:

{% csrf_token %}

优化后的完整表单代码

{% extends 'base.html' %}
   
{% block content %}
<div class="formbox">
    <form method="post" action="{% url 'create_user_view' %}">
        {% csrf_token %}
        <h1 class="max"> Sign up </h1>
        <input type ="text" class="max" id="fname" placeholder="username" name="username">
        <br>
        <input type="email" class="max" id="email" placeholder="email" name="email">
        <br>
        <input type="password" class="max" id="password" placeholder="password" name="password">
        <br>
        <input type="submit" name="submit" class="max" value="SUBMIT" id="submitid">
        <br>
        <a href="{% url 'login' %}" id="links">already have an account?</a>
    </form>
</div>
{% endblock %}

另外建议把链接a标签的硬编码路径改成{% url 'login' %},保持和Django的URL解析逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 01:20:37