Django 注册不起作用

Django registration is not working

我正在尝试添加用户注册页面,但它显示

NoReverseMatch at /register/

这是我的项目urls.py

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

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

页数urls.py

from django.urls import path
from .views import *

from django.contrib.auth import views

app_name = 'pages'
urlpatterns = [
    path('', home_view, name='home'),
    path('register/', register_user, name='register'),
]

页数views.py

def home_view(request, *args, **kwargs):
    return render(request, 'home.html', {})

def register_user(request, *args, **kwargs):
    if request.method=='POST':
        form = UserCreationForm(request.POST)

        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('home')

    else:
        form = UserCreationForm()

    context = {'form': form}
    return render(request, 'register.html', context)

register.html

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<h2>Register here</h2>
<body>
    <form method="post" action="{% url 'register' %}">
        {% csrf_token %}

        {% if form.errors %}
        <p>Invalid details</p>
        {% endif %}

        {{ form }}

        <input type="submit" value="Register">
    </form>
</body>
</html>

一切正常,但仍然显示错误

NoReverseMatch at /register/
Reverse for 'register' not found. 'register' is not a valid view function or pattern name.

urls.py 文件中,您指定了一个命名空间:

from django.urls import path
from .views import *

from django.contrib.auth import views

<b>app_name = 'pages'</b>

urlpatterns = [
    path('', home_view, name='home'),
    path('register/', register_user, name='register'),
]

这意味着为了引用这样的命名视图,您需要在它前面加上命名空间。所以这意味着在模板中你需要这样写:

<!DOCTYPE html>
<html>
<head>
    <title>Register</title>
</head>
<h2>Register here</h2>
<body>
    <form method="post" action="{% url '<b>pages:</b>register' %}">
        {% csrf_token %}

        {% if form.errors %}
        <p>Invalid details</p>
        {% endif %}

        {{ form }}

        <input type="submit" value="Register">
    </form>
</body>
</html>

此外 redirect(..) 应该以同样的方式重写:

def register_user(request, *args, **kwargs):
    if request.method=='POST':
        form = UserCreationForm(request.POST)

        if form.is_valid():
            form.save()
            username = form.cleaned_data['username']
            password = form.cleaned_data['password1']
            user = authenticate(username=username, password=password)
            login(request, user)
            return redirect('<b>pages:</b>home')

    else:
        form = UserCreationForm()

    context = {'form': form}
    return render(request, 'register.html', context)