【问题标题】:Redirecting to wrong URL Django重定向到错误的 URL Django
【发布时间】:2025-12-17 15:15:01
【问题描述】:

我一直在从事一个有多种用户类型的 Django 项目。因此,我创建了多个注册页面,为每种类型的用户创建一个。我创建了一个页面供用户选择他们是想注册为导师还是学生,以便他们以后可以得到正确的表格。 但是,我的网址无法正常工作,“注册”和“注册学生”网址都将我带到我为注册创建的视图。我做错了什么?

我的注册/urls.py:

    urlpatterns = [
       path('', views.register, name='register'),
       path('', views.student_register, name='student_register'),
 ]

我的注册/模板/注册/注册.html

    {% block content %}
       <h2>Sign up</h2>
       <p class="lead">Select below the type of account you want to create</p>
        <a href="{% url 'student_register' %}" class="btn btn-student btn-lg" 
         role="button">I'm a student</a>
    {% endblock %}

我的注册/views.py

    def register(request):
        return render(request, "register/register.html")

    def student_register(request):
        if request.method == "POST":
            student_form = StudentRegisterForm(request.POST)
            if student_form.is_valid():
                user = student_form.save(commit=False)
                user.is_student = True
                user.save()
        else:
            student_form = StudentRegisterForm()
        return render(request, "register/student_register.html", {"student_form": student_form})

还有我的应用程序的 url: 导师应用/导师应用/网址:

    urlpatterns = [
        path('', include("django.contrib.auth.urls")), # gives access to django log-in/out pages
       path('mainpage/', include('mainpage.urls')),
       path('register/', include('register.urls')),
       path('student_register/', include('register.urls')),
  ]

localhost:8000/register 显示“register.html”页面,当我点击“我是学生”时,url 更改为 localhost:8000/register_student,但它仍保留在同一个 html 页面 - 'register.html' ,并且它不会呈现包含学生注册表单的正确视图。有什么想法吗?

【问题讨论】:

  • 您应该在 register/urls.py 上为每个 url 提供不同的路径。 @natpas
  • @EliakinCosta 有帮助。谢谢!!
  • 不客气@natpas

标签: python django url django-views


【解决方案1】:

来自 django docs:

Django 按顺序运行每个 URL 模式,并在第一个停止 与请求的 URL 匹配的一个。

问题是:如何使用register/urls.py 为两条路径定义相同的 url,url 调度程序解析第一个,而 neves 寻找另一个。

例如

urlpatterns = [
       path('register', views.register, name='register'),
       path('register_student', views.student_register, name='student_register'),
 ]

【讨论】: