2017-08-25 37 views
0

私は次のNoReverseMatchエラー取得しています:「NoReverseMatch at /」エラーが表示されるのはなぜですか?

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 

enter image description here

をしかし、事はテンプレートで強調表示さmain.jsラインで、またどこかでどちらもNO「ログアウト」は存在しないことですテンプレート。ここで

は私のテンプレートです: 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) 

私は本当にこの「ログアウト」がどこから出現したのか分かりません。

+0

Djangoには['LoginView'](https://docs.djangoproject.com/ja/1.11/topics/auth/default/#django.contrib.auth.views.LoginView)があります。あなた自身で書くのではなく、これを使う方がいいでしょう。 – Alasdair

答えて

0

あなたの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を設定します。

+0

'{%url"ログアウト "%}"はコメントアウトされています。どのようにエラーが発生する可能性がありますか? – NiHao92

+0

'<! - 'はhtmlコメントです。 Djangoはまだその内容をレンダリングしようとします。 Djangoの複数のコメントの場合は、['{%comment%}'](https://docs.djangoproject.com/ja/1.11/ref/templates/builtins/#comment)タグが必要です。 – Alasdair

+0

thanx。これは以前私がDjangoについて知らなかった非常に重要な情報です。だから、もし私がHTMLとDjangoの両方としてコメントしたいのなら、 '<! - {%comment%} {%comment%} - >' – NiHao92

関連する問題