我正试图为我的 Django 项目制作一个注册页面。当我编译注册表单时,它出现了图片中的错误,因为它试图转到以下路径(he doubles users/register):localhost/users/register/users/register/。我的代码如下:
错误图像:users/view.py:
def register_view(request):
if request.method == "POST":
form = UserCreationForm(request.POST)
if form.is_valid():
form.save()
return redirect('homepage')
else:
form = UserCreationForm()
return render(request, "users/register.html", {"form": form})
user/urls.py:
urlpatterns = [
path('register/', views.register_view, name="register")、
]
main/views.py:
def homepage(request):
return render(request, 'homepage.html')
main/urls.py:
urlpatterns = [
path('admin/', admin.site.urls)、
path('', views.homepage, name="homepage")、
path('music/', include('music.urls'))、
path('users/', include('users.urls'))、
]
错误的原因在于你的 register_view
函数中的 redirect()
调用。当你成功注册一个用户后,你正在重定向到 'homepage'
,但是你的代码中没有叫做 'homepage'
的 命名 URL 模式。
你需要做两件事来解决这个问题:
- 为你的
homepage
视图添加一个命名 URL 模式
在你的 main/urls.py
文件中,你已经为 homepage
视图定义了一个 URL 模式,但是你没有给它命名。你需要添加一个 name
参数来命名这个 URL 模式:
# main/urls.py
urlpatterns = [
# ... other url patterns
path('', views.homepage, name='homepage'),
# ... other url patterns
]
- 使用
reverse()
函数来生成重定向 URL
在你的 register_view
函数中,你需要使用 reverse()
函数来生成 homepage
视图的 URL。reverse()
函数接受一个命名 URL 模式作为参数,并返回该 URL 模式的完整 URL。
from django.shortcuts import render, redirect, reverse
# users/views.py
def register_view(request):
# ... your existing code ...
return redirect(reverse('homepage'))
# ... your existing code ...
通过以上两个步骤,当你成功注册一个用户后,你的代码将会正确地重定向到 homepage
视图。
额外说明:
- 命名 URL 模式使得你的代码更加灵活,因为你可以在不修改所有代码的情况下更改 URL。
redirect()
函数接受一个 URL 字符串或者一个HttpResponseRedirect
对象作为参数。- 你也可以使用
redirect('homepage')
来代替redirect(reverse('homepage'))
,但是使用reverse()
函数是更好的实践,因为它可以让你在不修改代码的情况下更改 URL 模式。
希望以上信息能够帮助你解决问题!
标签:python,html,django,backend From: 78548687