找不到 NoReverseMatch at / Reverse for 'register_request'。"register_request"不是有效的视图函数或模式名称



这是一个购物网站,我的登录和注册表格不工作,它显示没有反向路径发现错误。这是我的导航条模板

<div class="container py-5">
<p class="text-center">If you already have an account, <a href="{% url 
'sweet:register_request' %}">login</a> instead.</p>
</div>
<div class="container py-5">
<p class="text-center">Don't have an account? <a href="/register">Create an account</a>. 
</p>
</div>

login.html这是我的登录模板

{% extends "base.html" %}

{% load static %}

{% block content %}

<form method="POST">

{% csrf_token %}

{{ login_form }}

<button class="btn btn-primary" type="submit">Login</button>

</form>

{% endblock %}

home。这是我的注册模板

{% extends "base.html" %}

{% load static %}

{% block content %}

<form method="POST">

<button class="btn btn-primary"  type="submit">Register</button>

{% csrf_token %}

{{register_form}}

</form>

{% endblock %}

views.pyRegister_request是用来注册表单的函数,login_request是用来登录到我的网站

def register_request(request):
if request.method == "POST":
form = NewUserForm(request.POST)
if form.is_valid():
user = form.save()
login(request, user)
messages.success(request, "Registration successful.")
return redirect('login_request')
messages.error(request, "Unsuccessful registration. Invalid information.")
form = NewUserForm()
return render(request,"home.html",{"register_form": form})

def login_request(request):
if request.method == "POST":
form = AuthenticationForm(request, data=request.POST)
if form.is_valid():
username = form.cleaned_data.get('username')
password = form.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
messages.info(request, "You are now logged in as {username}.")
return redirect("base.html")
else:
messages.error(request, "Invalid username or password.")
else:
messages.error(request, "Invalid username or password.")
form = AuthenticationForm()
return render(request, 'login.html',{"login_form": form})

urls . py

from django.contrib.auth.views import LogoutView, LoginView
from django.urls import path
from . import views
from django.contrib.auth import views as auth_views
app_name="sweet"
urlpatterns = [
path('',views.allProdCat,name='allProdCat'),
path('<slug:c_slug>/',views.allProdCat,name='products_by_category'),
path('<slug:c_slug>/<slug:prod_slug>/', views.ProductDetail, name='ProdCatDetail'),
path('register/', views.register_request, name="register"),
path("login/", views.login_request, name="login"),
]

forms.py这个表单是用来注册和登录的

from django import forms
from django.contrib.auth.models import User
from . import models
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
class NewUserForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
def save(self, commit=True):
user = super(NewUserForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user

这是我所有的代码,请帮助

您试图在{% url 'sweet:register_request' %}中获得views.register_request的地址,但您选择的url路径名称不同。您可以选择以下两个选项之一,在这两个选项中您都需要更改名称。

选项1:

# from
path('register/', views.register_request, name="register"),
# to
path('register/', views.register_request, name="register_request"),

选项2:

# from
{% url 'sweet:register_request' %}
# to
{% url 'sweet:register' %}

而不是这样的:

<div class="container py-5">
<p class="text-center">If you already have an account, <a href="{% url 
'sweet:register_request' %}">login</a> instead.</p>
</div>
<div class="container py-5">
<p class="text-center">Don't have an account? <a href="/register">Create an account</a>. 
</p>
</div>

这样做:

<div class="container py-5">
<p class="text-center">If you already have an account, <a href="{% url 
'sweet:register' %}">login</a> instead.</p>
</div>
<div class="container py-5">
<p class="text-center">Don't have an account? <a href="/register">Create an account</a>. 
</p>
</div>

最新更新