Python 为什么Django会将url重定向到不需要的页面

Python 为什么Django会将url重定向到不需要的页面,python,django,url,redirect,Python,Django,Url,Redirect,我尝试在Django(版本2.2)中进行用户注册。我可以运行本地服务器并填写注册表,但当我点击提交按钮时,会出现不同的重定向,并且不会创建新用户。不是重定向到主页(“/”),而是重定向到“accounts/register/register”,我不知道为什么。有人能帮我找到问题吗 在前面的views.py中,我使用了来自django.contrib.auth.models的导入用户,并更改了register.html中的代码,但问题是相同的。也许我的设置有问题。py? 在settings.py中

我尝试在Django(版本2.2)中进行用户注册。我可以运行本地服务器并填写注册表,但当我点击提交按钮时,会出现不同的重定向,并且不会创建新用户。不是重定向到主页(“/”),而是重定向到“accounts/register/register”,我不知道为什么。有人能帮我找到问题吗

在前面的views.py中,我使用了来自django.contrib.auth.models的导入用户,并更改了register.html中的代码,但问题是相同的。也许我的设置有问题。py? 在settings.py中,我添加到已安装的应用程序=['users.APPS.UsersConfig',],并在登录结束时\u REDIRECT\u URL='/'

# views.py
from django.shortcuts import render, redirect
from django.contrib import messages
from django.contrib.auth.forms import UserCreationForm

def register(request):
    if request.method == "POST":
        form_register = UserCreationForm(request.POST)
        if form_register.is_valid():
            username = form_register.cleaned_data.get('username')
            messages.success(request, f'Account created for {username}!')
            return redirect('register/')
    else:
        form_register = UserCreationForm()
    return render(request, "registration/register.html", {'form_register': form_register})


# urls.py
from django.contrib import admin
from django.urls import path, include
from users.views import register

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('django.contrib.auth.urls')),
    path('accounts/register/', register),]


# apps.py
from django.apps import AppConfig

class UsersConfig(AppConfig):
    name = 'users'


# register.html
<!doctype html>
<html>
<head>
    <title>Register</title>
</head>

<body>
    <form action="register" method="POST">
        {% csrf_token %}
        {{form_register.as_p}}
        <button type="submit">Register</button>
    </form>

    <div>
        {% for message in messages %}
        <h3> {{ message }} </h3>
        {% endfor %}
    </div>
</body>


</html>
#views.py
从django.shortcuts导入渲染,重定向
从django.contrib导入消息
从django.contrib.auth.forms导入UserCreationForm
def寄存器(请求):
如果request.method==“POST”:
form\u register=UserCreationForm(request.POST)
如果表单注册有效():
username=form\u register.cleaned\u data.get('username'))
messages.success(请求,f'为{username}创建的帐户!')
返回重定向('寄存器/')
其他:
form_register=UserCreationForm()
返回呈现(请求“registration/register.html”,{'form_register':form_register})
#url.py
从django.contrib导入管理
从django.url导入路径,包括
从users.views导入注册表
URL模式=[
路径('admin/',admin.site.url),
路径('accounts/',包括('django.contrib.auth.url'),
路径('accounts/register/',register),]
#apps.py
从django.apps导入AppConfig
类UsersConfig(AppConfig):
名称='用户'
#register.html
登记
{%csrf_令牌%}
{{form_register.as_p}}
登记
{消息%中的消息为%s}
{{message}}
{%endfor%}

Django没有在任何地方重定向。您的实际注册视图甚至没有被调用

您已将表单操作设置为“注册”。这是一条相对的路径;因为您是从“/accounts/register/”开始的,所以它将被附加到其中,这就是表单将提交到的位置

您应该执行以下操作之一:

  • 将完整路径放在以下格式中:
    action=“/accounts/register/”
  • 更好的方法是,在URL.py中为URL模式命名:
    path('accounts/register/',register,name='register')
    并使用url标记引用它:
    action=“{%url'寄存器'%}”

  • 或者,只需将操作留空,在这种情况下,它将提交到相同的页面,这正是您想要的:
    action=“”


    • 谢谢您的帮助。我采纳了你所有的建议,但我还是有同样的问题。尝试注册新用户后,我在终端中得到以下回复:

      Not Found: /accounts/register/register    
      [31/Oct/2019 20:18:40] "POST /accounts/register/register HTTP/1.1" 404 3847    
      Not Found: /favicon.ico    
      [31/Oct/2019 20:18:40] "GET /favicon.ico HTTP/1.1" 404 2335
      
      为了解决favicon的问题,我加入了url.py

      from django.views.generic import RedirectView
      
      url_patterns=[
      
      path(r'^favicon\.ico$',RedirectView.as_view(url='/static/images/favicon.ico')),] 
      
      但它不起作用。最糟糕的问题是没有创建新用户