【问题标题】:Django templates ; Reverse for '' not found. '' is not a valid view function or pattern nameDjango 模板;未找到“”的反向。 '' 不是有效的视图函数或模式名称
【发布时间】: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 路径名
  • 不,没用,我试过了
  • 什么没有帮助?正确的路径名好像是“注册”,你试过&lt;a href="{% url 'register' %}"&gt;register here&lt;/a&gt;吗?

标签: python html django


【解决方案1】:

此错误的原因是您的login.html 中的以下行:

<p>Please, use the following form to log-in. If you don't have an account
<a href="{% url '' %}">register here</a></p>

通过空参数调用url模板标签,自然会报错Reverse for '' not found. 解决方法是指定url名称:

<p>Please, use the following form to log-in. If you don't have an account
<a href="{% url 'register' %}">register here</a></p>

可能只是你的疏忽,一直发生在我身上:-)

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 2018-01-25
    • 2019-06-27
    • 2018-11-19
    • 2019-11-01
    • 2021-06-11
    • 1970-01-01
    • 2019-04-21
    • 2021-07-18
    相关资源
    最近更新 更多