【问题标题】:Django redirecting to a wrong urlDjango 重定向到错误的 url
【发布时间】:2020-07-07 12:05:01
【问题描述】:

当我在我的表单上单击提交时,它会转到 ../register/register/ 我期望它应该转到 ../register

这是我的主要项目 urls.py

urlpatterns = [
    path('participants/', include('participants.urls')),
    path('admin/', admin.site.urls),
]

这是我的应用程序 urls.py

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

这是我的观点功能

def register(request):
    if request.method == "POST":
        username = request.POST['username']
        # email = request.POST['email']
        password = request.POST['pass']
        print(username, password)
        user = User.objects.create_user(username=username, password=password)
        user.save()
        return redirect('register')

    else:
        return render(request, 'register.html')

【问题讨论】:

  • 您在模板中将表单标签的action 属性设置为什么?
  • 显示你的 urls.py 完整文件和模板文件

标签: python django web


【解决方案1】:

您可以尝试将命名空间添加到您的网址

主项目 urls.py

urlpatterns = [
    path('participants/', include('participants.urls', namespace='participants')),
    path('admin/', admin.site.urls),
]

应用程序 urls.py

app_name = 'participants'
urlpatterns = [
    path('register/', views.register, name="register")
]

查看

def register(request):
    if request.method == "POST":
    ...
    return redirect('participants:register')

【讨论】:

  • 感谢您的帮助
【解决方案2】:

您可以安装django-extensions 并运行manage.py show_urls 以找出您拥有的网址,还可以尝试reverse('register') 来检查它指向的位置。

【讨论】:

  • 非常感谢!
【解决方案3】:

使用

return redirect('/register')

而不是

return redirect('register')

您需要前面的斜杠('/')让 Django 知道它正在引用主机名之后的命名 URL 的根。

没有斜线,它只会附加到当前命名的 URL

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2021-10-29
    • 2012-11-25
    • 1970-01-01
    • 2021-07-19
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多