【问题标题】:Why am I getting "NoReverseMatch at /" error?为什么我会收到“NoReverseMatch at /”错误?
【发布时间】:2018-02-04 00:50:27
【问题描述】:

我收到下一个 NoReverseMatch 错误:

NoReverseMatch at /

Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.

Request Method:     GET
Request URL:    http://127.0.0.1:8000/
Django Version:     1.11.3
Exception Type:     NoReverseMatch
Exception Value:    

Reverse for 'logout' not found. 'logout' is not a valid view function or pattern name.

Exception Location:     /home/ivan/.local/lib/python2.7/site-packages/django/urls/resolvers.py in _reverse_with_prefix, line 497
Python Executable:  /usr/bin/python
Python Version:     2.7.12
Python Path:    

['/home/ivan/My_website/essostrade (copy 1)',
 '/usr/lib/python2.7',
 '/usr/lib/python2.7/plat-x86_64-linux-gnu',
 '/usr/lib/python2.7/lib-tk',
 '/usr/lib/python2.7/lib-old',
 '/usr/lib/python2.7/lib-dynload',
 '/home/ivan/.local/lib/python2.7/site-packages',
 '/usr/local/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages',
 '/usr/lib/python2.7/dist-packages/PILcompat',
 '/usr/lib/python2.7/dist-packages/gtk-2.0',
 '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
 '/usr/lib/python2.7/dist-packages/wx-3.0-gtk2']

Server time:    Fri, 25 Aug 2017 22:51:14 +0000

但问题是模板中突出显示的 main.js 行中没有“注销”,模板中的其他地方也没有。

这是我的模板: main.html:

{% extends "base.html" %}
{% load staticfiles %}
{% block additional_css %}
  <link type="text/css" href="{% static "main.css" %}" rel="stylesheet">
{% endblock %}
{% block content %}
  <div id="header">
    <h1>Браавосская лавочка</h1>
  </div>
 <!-- <div id="leftmenu">
    <ul>
      {% url "main" as page_url %}
      <li><a href="{{ page_url }}"{% if page_url == current_url %} class="current"{% endif %}>Главная</a></li>
      {% if user.is_authenticated %}
        <li class="indented"><a href="/admin/">Админка</a></li>
        <li class="indented"><a href="{% url "logout" %}">Выйти</a></li>
      {% endif %}
    </ul> 
  </div>   -->       
<div id="main">
  {% block main %}
  {% endblock %}
</div>
<div id="footer">
  <p>Все права принадлежат Матери Драконов</p>
</div>
{% endblock %}     

mainpage.html:

{% extends "main.html" %}
{% block title %}Главная страница{% endblock %}
{% block main %}
  <h2>Удивительные товары со всего Вестероса</h2>
  <p>Фирма веников не вяжет, фирма делает гробы</p>
{% endblock %}

这是我的 views.py 文件:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.views.generic import TemplateView
from generic.mixins import CategoryListMixin
from django.shortcuts import render
from django.contrib.auth import login, authenticate
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from django import forms





class MainPageView(TemplateView, CategoryListMixin):
    template_name = "mainpage.html"





class LoginView(TemplateView):
    template_name = "login_logout.html"
    isLoggedIn = False





class PageNumberMixin(CategoryListMixin):
    def get_context_data(self, **kwargs):
        context = super(PageNumberMixin, self).get_context_data(**kwargs)
        try:
            context["pn"] =  self.request.GET["page"]
        except KeyError: 
            context["pn"] = "1"
        return context  





def signup(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('home')
    else:
        form = UserCreationForm()
    return render(request, 'signup.html', {'form': form})

这是我的 urls.py 文件:

from django.conf.urls import url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static  import static
from django.conf.urls import include
from main.views import LoginView, MainPageView
from main.views import signup

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', MainPageView.as_view(), name='main'),
    url(r'^signup/$', signup, name='signup'),



]

urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)

我真的不知道这个“注销”是从哪里出现的。

【问题讨论】:

  • 请注意,Django 有一个LoginView。最好使用它而不是自己编写。

标签: django django-forms django-templates django-views renderer


【解决方案1】:

您的 main.html 模板正在尝试反转 URL 注销,但您尚未为注销视图添加 URL 模式。

{% url "logout" %}

from django.contrib.auth.views import LogoutView

url(r'^logout/$', LogoutView.as_view(), name='logout'),

您必须创建要显示的registration/logged_out.html 模板,或在您的设置中设置LOGOUT_REDIRECT_URL

【讨论】:

  • 但是{% url "logout" %} 被注释掉了。它怎么会导致任何错误?
  • &lt;!-- 是一个 html 评论。 Django 仍然会尝试渲染它的内容。对于 Django 中的多行 cmets,您需要 {% comment %} 标签。
  • 谢谢。这是我以前不了解 Django 的一个非常重要的信息。因此,如果我想同时将其评论为 html 和 Django,我需要类似 &lt;!-- {% comment % } {% comment % } --&gt; 的内容
  • {% comment %}标签的内容不会出现在渲染的html中,所以不需要包裹在&lt;!--
猜你喜欢
  • 2020-09-02
  • 2019-10-30
  • 2020-11-05
  • 2020-11-05
  • 2018-06-22
  • 2020-01-12
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多