【发布时间】:2021-04-21 03:44:13
【问题描述】:
我的模板出现这个错误,我不明白是什么问题,请帮助
NoReverseMatch 在 /login/ 未找到“”的反向。 '' 不是有效的视图函数或模式名称。 请求方法:GET 请求网址:http://localhost:5000/login/ Django 版本:3.1 异常类型:NoReverseMatch 异常值:
未找到“”的反向。 '' 不是有效的视图函数或模式名称。 异常位置:/home/daniiar/.local/lib/python3.8/site-packages/django/urls/resolvers.py,第 685 行,在 _reverse_with_prefix Python 可执行文件:/usr/bin/python3 Python版本:3.8.5 Python 路径:
['/home/daniiar/land-gPage', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/daniiar/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages'] 服务器时间:2021 年 1 月 16 日星期六 13:39:04 +0600 模板渲染期间出错 在模板 /home/daniiar/land-gPage/auto/templates/base.html 中,第 14 行出错 未找到“”的反向。 '' 不是有效的视图函数或模式名称。
完整追溯
Traceback(最近一次调用最后一次): 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/core/handlers/exception.py”,第 47 行,在内部 响应 = get_response(请求) _get_response 中的文件“/home/daniiar/.local/lib/python3.8/site-packages/django/core/handlers/base.py”,第 202 行 响应 = response.render() 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/response.py”,第 105 行,在渲染中 self.content = self.rendered_content 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/response.py”,第 83 行,在 render_content 中 return template.render(context, self._request) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/backends/django.py”,第 61 行,在渲染中 返回 self.template.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 170 行,在渲染中 返回self._render(上下文) _render 中的文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 162 行 返回 self.nodelist.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 938 行,在渲染中 bit = node.render_annotated(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 905 行,在 render_annotated 返回 self.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/loader_tags.py”,第 150 行,在渲染中 返回已编译的_parent._render(上下文) _render 中的文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 162 行 返回 self.nodelist.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 938 行,在渲染中 bit = node.render_annotated(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 905 行,在 render_annotated 返回 self.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/loader_tags.py”,第 62 行,在渲染中 结果 = block.nodelist.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 938 行,在渲染中 bit = node.render_annotated(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 905 行,在 render_annotated 返回 self.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/defaulttags.py”,第 312 行,在渲染中 返回 nodelist.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 938 行,在渲染中 bit = node.render_annotated(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/base.py”,第 905 行,在 render_annotated 返回 self.render(context) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/template/defaulttags.py”,第 446 行,在渲染中 url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) 文件“/home/daniiar/.local/lib/python3.8/site-packages/django/urls/base.py”,第 87 行,反向 return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) _reverse_with_prefix 中的文件“/home/daniiar/.local/lib/python3.8/site-packages/django/urls/resolvers.py”,第 685 行 提高 NoReverseMatch(味精) django.urls.exceptions.NoReverseMatch:找不到''的反向。 '' 不是有效的视图函数或模式名称。
base.html
{% load static %}
<!DOCTYPE html>
<html>
<head>
<title>{% block title %}{% endblock %}</title>
<link href="{% static 'css/base.css' %}" rel="stylesheet">
</head>
<body>
<div id="header">
<span class="logo">Bookmarks</span>
{% if request.user.is_authenticated %}
<ul class="menu">
<li {% if section == 'dashboard' %}class="selected"{% endif %}>
<a href="{% url 'dashboard' %}">My dashboard</a>
</li>
<li {% if section == 'images' %}class="selected"{% endif %}>
<a href="#">Images</a>
</li>
<li {% if section == 'people' %}class="selected"{% endif %}>
<a href="#">People</a>
</li>
</ul>
{% endif %}
<span class="user">
{% if request.user.is_authenticated %}
Hello {{ request.user }},
<a href="{% url 'logout' %}">Logout</a>
{% else %}
<a href="{% url 'login' %}">Log-in</a>
{% endif %}
</span>
</div>
{% if messages %}
<ul class="messages">
{% for message in messages %}
<li class="{{ message.tags }}">
{{ message|safe }}
<a href="#" class="close">x</a>
</li>
{% endfor %}
</ul>
{% endif %}
<div id="content">
{% block content %}
{% endblock %}
</div>
</body>
</html>
login.html
{% extends "base.html" %}
{% block title %}Log-in{% endblock %}
{% block content %}
<h1>Log-in</h1>
{% if form.errors %}
<p>
Your username and password didn't match.
Please try again.
</p>
{% else %}
<p>Please, use the following form to log-in. If you don't have an account <a href="{% url '' %}">register here</a></p>
{% endif %}
<div class="login-form">
<form action="{% url 'login' %}" method="post">
{{ form.as_p }}
{% csrf_token %}
<input type="hidden" name="next" value="{{ next }}" />
<p><input type="submit" value="Log-in"></p>
</form>
<p><a href="{% url '' %}">Forgotten your password?</a></p>
</div>
<!-- <div class="social">-->
<!-- <ul>-->
<!-- <li class="facebook"><a href="{% url "social:begin" "facebook" %}">Sign in with Facebook</a></li>-->
<!-- <li class="twitter"><a href="{% url "social:begin" "twitter" %}">Login with Twitter</a></li>-->
<!-- <li class="google"><a href="{% url "social:begin" "google-oauth2" %}">Login with Google</a></li>-->
<!-- </ul>-->
<!-- </div>-->
{% endblock %}
views.py
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth import *
from django.contrib.auth.decorators import login_required
from django.contrib import messages
from .forms import *
from .models import *
from django.views import View
from .forms import FeedbackForm
def formuser(request):
return render(request, 'account/testregister.html')
def user_login(request):
if request.method == 'POST':
form = LoginForm(request.POST)
if form.is_valid():
cd = form.cleaned_data
user = authenticate(request, username=cd['username'],password=cd['password'])
if user is not None:
if user.is_active:
login(request, user)
return HttpResponse('Authenticated '\
'successfully')
else:
return HttpResponse('Disabled account')
else:
return HttpResponse('Invalid login')
else:
form = LoginForm()
return render(request, 'auto/login.html', {'form': form})
@login_required
def dashboard(request):
return render(request,
'auto/dashboard.html',
{'section': 'dashboard'})
def register(request):
if request.method == 'POST':
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
new_user = user_form.save(commit=False)
new_user.set_password(
user_form.cleaned_data['password'])
new_user.save()
Profile.objects.create(user=new_user)
return render(request,
'auto/register_done.html',
{'new_user': new_user})
else:
user_form = UserRegistrationForm()
return render(request,
'auto/register.html',
{'user_form': user_form})
@login_required
def edit(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user,data=request.POST)
profile_form = ProfileEditForm(instance=request.user.profile, data=request.POST, files=request.FILES)
if user_form.is_valid() and profile_form.is_valid():
user_form.save()
profile_form.save()
messages.success(request, 'Profile updated successfully')
else:
messages.error(request, 'Error updating your profile')
else:
user_form = UserEditForm(instance=request.user)
profile_form = ProfileEditForm(instance=request.user.profile)
return render(request,
'auto/edit.html',
{'user_form': user_form,
'profile_form': profile_form})
@login_required
def editPartner(request):
if request.method == 'POST':
user_form = UserEditForm(instance=request.user,data=request.POST)
partner_form = PartnerEditForm(instance=request.user.profile, data=request.POST, files=request.FILES)
if user_form.is_valid() and partner_form.is_valid():
user_form.save()
partner_form.save()
messages.success(request, 'Profile updated successfully')
else:
messages.error(request, 'Error updating your profile')
else:
user_form = UserEditForm(instance=request.user)
partner_form = PartnerEditForm(instance=request.user.partner)
return render(request,
'auto/edit.html',
{'user_form': user_form,
'partner_form': partner_form})
class FeedbackView(View):
def post(self, request):
if request.method == 'POST':
form = FeedbackForm(request.POST)
if form.is_valid():
form.save()
phoneNumber = form.cleaned_data['phoneNumber']
name = form.cleaned_data['name']
text = form.cleaned_data['text']
subject = 'Новое сообщение'
message = 'Новая заявка!' + '\r\n' + '\r\n' + 'Номер телефона: ' + phoneNUmber + '\r\n' + '\r\n' + 'ФИО:' + name + '\r\n' + 'Сообщение' + text
bot.send_message(628980737, message)
return redirect('home')
urls.py
from django.urls import path, include
from django.contrib.auth import views as auth_views
from . import views
urlpatterns = [
path('login/', auth_views.LoginView.as_view(), name='login'),
path('logout/', auth_views.LogoutView.as_view(), name='logout'),
path('', views.dashboard, name='dashboard'),
path('register/', views.register, name='register'),
path('formregister/', views.formuser, name="formuser"),
# change password urls
# path('password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
# path('password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
# reset password urls
# path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
# path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
# path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
# path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]
怎么了?
【问题讨论】:
-
您能否将完整的回溯和处理
/login/的视图添加到您的问题中?不是很明显这是您的模板的问题 -
好的,一分钟
-
您将一个空字符串传递给
login.html中的register here链接网址标签。您应该传递一个有效的 url 路径名 -
不,没用,我试过了
-
什么没有帮助?正确的路径名好像是“注册”,你试过
<a href="{% url 'register' %}">register here</a>吗?