2017-08-25 2 views
1

Ich mache ein Web sitzen, indem Sie Django Tutorial sehen. bekam ich einen Fehler:NoReverseMatch at/Umfragen/

NoReverseMatch at /polls/ Reverse for 'index' with no arguments not found. 1 pattern(s) tried: ['$/'].

error

Traceback sagte

Traceback: 

File "/Users/XXX/django/django/core/handlers/exception.py" in inner 
    35.    response = get_response(request) 

File "/Users/XXX/django/django/core/handlers/base.py" in _get_response 
    130.     response = self.process_exception_by_middleware(e, request) 

File "/Users/XXX/django/django/core/handlers/base.py" in _get_response 
    128.     response = wrapped_callback(request, *callback_args, **callback_kwargs) 

File "/Users/XXX/djangostudy/polls/views.py" in index 
    23.   'questions': Question.objects.all(), 

File "/Users/XXX/django/django/shortcuts.py" in render 
    36.  content = loader.render_to_string(template_name, context, request, using=using) 

File "/Users/XXX/django/django/template/loader.py" in render_to_string 
    62.  return template.render(context, request) 

File "/Users/XXX/django/django/template/backends/django.py" in render 
    61.    return self.template.render(context) 

File "/Users/XXX/django/django/template/base.py" in render 
    175.      return self._render(context) 

File "/Users/XXX/django/django/template/base.py" in _render 
    167.   return self.nodelist.render(context) 

File "/Users/XXX/django/django/template/base.py" in render 
    943.     bit = node.render_annotated(context) 

File "/Users/XXX/django/django/template/base.py" in render_annotated 
    910.    return self.render(context) 

File "/Users/XXX/django/django/template/loader_tags.py" in render 
    155.    return compiled_parent._render(context) 

File "/Users/XXX/django/django/template/base.py" in _render 
    167.   return self.nodelist.render(context) 

File "/Users/XXX/django/django/template/base.py" in render 
    943.     bit = node.render_annotated(context) 

File "/Users/XXX/django/django/template/base.py" in render_annotated 
    910.    return self.render(context) 

File "/Users/XXX/django/django/template/loader_tags.py" in render 
    155.    return compiled_parent._render(context) 

File "/Users/XXX/django/django/template/base.py" in _render 
    167.   return self.nodelist.render(context) 

File "/Users/XXX/django/django/template/base.py" in render 
    943.     bit = node.render_annotated(context) 

File "/Users/XXX/django/django/template/base.py" in render_annotated 
    910.    return self.render(context) 

File "/Users/XXX/django/django/template/defaulttags.py" in render 
    447.    url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app) 

File "/Users/XXX/django/django/urls/base.py" in reverse 
    87.  return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)) 

File "/Users/XXX/django/django/urls/resolvers.py" in _reverse_with_prefix 
    488.   raise NoReverseMatch(msg) 

Exception Type: NoReverseMatch at /polls/ 
Exception Value: Reverse for 'index' with no arguments not found. 1 pattern(s) tried: ['$/'] 

ich in base.html schrieb, die als Eltern App als gleiche ist wie

{% load staticfiles %} 
{% load bootstrap3 %} 
<html lang="en"> 
    <head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1"> 
    <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> 
    <meta name="description" content=""> 
    <meta name="author" content=""> 
    <link rel="icon" href="../../favicon.ico"> 

    <title>Starter Template for Bootstrap</title> 

    <!-- Bootstrap core CSS --> 
    <link href="static/css/bootstrap.min.css" rel="stylesheet"> 
    <style type="text/css"> 
body { 
    padding-top: 50px; 
} 
    </style> 
    </head> 

    <body> 
    <nav class="navbar navbar-inverse navbar-fixed-top"> 
     <div class="container"> 
     <div class="navbar-header"> 
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> 
      <span class="sr-only">Toggle navigation</span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      <span class="icon-bar"></span> 
      </button> 
      <a class="navbar-brand" href="{% url 'index' %}">Tutorial</a> 
     </div> 
     <div id="navbar" class="collapse navbar-collapse"> 
      <ul class="nav navbar-nav"> 
      <li class="{% block nav_polls %}{% endblock %}"><a href="{% url 'polls:index' %}">polls</a></li> 
      <li class=""><a href="{% url 'admin:index' %}">admin</a></li> 
      </ul> 
     </div><!--/.nav-collapse --> 
     </div> 
    </nav> 

    <div class="container"> 
    {% bootstrap_messages messages %} 
    {% block contents %}{% endblock %} 
    </div><!-- /.container --> 
    <!-- Bootstrap core JavaScript 
    ================================================== --> 
    <!-- Placed at the end of the document so the pages load faster --> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script> 
    <script>window.jQuery || document.write('<script src="../../assets/js/vendor/jquery.min.js"><\/script>')</script> 
    <script src="{% static 'js/bootstrap.min.js' %}"></script> 
    </body> 
</html> 

urls.py des Verzeichnisses der Eltern ist

from django.conf.urls import include,url 
from django.contrib import admin 
from polls.views import index 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^polls/',include('polls.urls')), 
    url(r'^$/',index,name='index'), 
] 

urls.py der Kinder App, deren Name Umfragen ist wie

from django.conf.urls import url 
from django.views.generic import TemplateView 
from . import views 

app_name="polls" 
urlpatterns = [ 
    url(r'^$',views.index,name='index'), 
    url(r'(?P<pk>\d+)/$', views.detail, name='poll_detail'), 
    url(r'(?P<pk>\d+)/vote$', views.vote, name='poll_vote'), 
    url(r'(?P<pk>\d+)/results$', views.results, name='poll_results'), 
    url(r'^$',TemplateView.as_view(template_name='app/index.html'),name='app_index'), 
    url(r'^form$', views.form_test), 
] 

Ich kann wirklich nicht verstehen, warum dieser Fehler den Weg zu designieren "{% url 'index' %}" falsch happens.Is? Wie kann ich das beheben?

Mein views.py ist wie

from django.shortcuts import render 
from django.urls import reverse_lazy 
from django.utils.html import mark_safe 
from .models import Question 
from django.http import HttpResponse 
from django.shortcuts import Http404 
from django.shortcuts import get_object_or_404,redirect 
from .models import Choice 
from django.views.generic import TemplateView 
from django.views.generic import DetailView 
from django.views.generic import ListView 
from .forms import MyForm 
from .forms import VoteForm 
from django.views.generic import FormView 
from django.views.generic.detail import SingleObjectMixin 
from django.shortcuts import resolve_url 

def index(request): 
    return render(request,'polls/index.html',{ 
     'questions': Question.objects.all(), 
    }) 

def vote(request,pk): 
    question = get_object_or_404(Question,pk=pk) 
    try: 
     selected_choice = question.choice_set.get(pk=request.POST['choice']) 
    except (KeyError,Choice.DoesNotExist): 
     return render(request,'poll/detail.html',{ 
      'question':question, 
      'error_message':"You didn't select a choice", 
     }) 
    else: 
     selected_choice.votes += 1 
     selected_choice.save() 
     return redirect('index') 
    return redirect('poll_results', pk) 
    # pass 

def results(request,pk): 
    obj = get_object_or_404(Question,pk=pk) 
    return render(request,'polls/results.html',{ 
     'question':obj, 
    }) 

class FormTest(FormView): 
    form_class = MyForm 
    template_name = 'polls/form.html' 
    success_url = reverse_lazy('polls:index') 
form_test = FormTest.as_view() 

class Detail(SingleObjectMixin,FormView): 
    model = Question 
    form_class = VoteForm 
    context_object_name = 'question' 
    template_name = 'polls/detail.html' 

    def get(self, request, *args, **kwargs): 
     self.object = self.get_object() 
     return super().post(request, *args, **kwargs) 

    def post(self, request, *args, **kwargs): 
     self.object = self.get_object() 
     return super().post(request, *args, **kwargs) 

    def get_form_kwargs(self): 
     kwargs = super().get_form_kwargs() 
     kwargs['question'] = self.object 
     return kwargs 

    def form_valid(self, form): 
     form.vote() 
     return super().form_valid(form) 

    def get_success_url(self): 
     return resolve_url('polls:results',self.kwargs['pk']) 

detail = Detail.as_view() 

Meine Auswahl directory

+0

URL (r '^ $ /', Index, Name = 'Index'), auf beiden URL-Dateien. Ich denke, das schafft das Problem – Ananthu

+0

@Ananthu thx, löschte ich jede URL (r '^ $ /', Index, Name = 'Index'), aber beide Fehler passiert.Was soll ich tun, um das zu beheben? – user8504021

+0

Versuchen Sie, Regex für URL zu diesem: 'url (r '^ $', Index, Name = 'Index'),' ohne '/' – neverwalkaloner

Antwort

0

ist Sie doppelte URLs haben, und duplizieren von URL-Namen index, versuchen Sie es zu beheben

zum Beispiel in Umfragen .urls

urlpatterns = [ 
    url(r'^$', TemplateView.as_view(template_name='app/index.html'), name='app_index'), 
    url(r'(?P<pk>\d+)/$', views.detail, name='poll_detail'), 
    url(r'(?P<pk>\d+)/vote$', views.vote, name='poll_vote'), 
    url(r'(?P<pk>\d+)/results$', views.results, name='poll_results'), 
    url(r'^form$', views.form_test), 
] 

in urls.py

urlpatterns = [ 
    url(r'^$',index,name='index'), 
    url(r'^admin/', admin.site.urls), 
    url(r'^polls/',include('polls.urls')), 
] 

urls ("Django läuft durch jedes URL-Muster um, und hält an dem ersten, die die angeforderten URL übereinstimmt.")

+0

thx, wie kann ich beheben? Sollte ich # ^^^^ hinzufügen? – user8504021

+0

@ user8504021 Ich bearbeite Antwort, zum Beispiel, aber Sie müssen Logik überprüfen –

+0

thx, ich reparierte wie Sie geschrieben, aber TemplateDoesNotExist bei/Umfragen/ Vorlagen/Umfragen/index.html Fehler passieren. Ich schrieb url (r '^ $ ', TemplateView.as_view (Vorlagen_Name =' Vorlagen/Umfragen/Index.html '), Name =' Anwendungs_Index '),. Ich habe das betreffende Verzeichnis aktualisiert. Wenn Sie also etwas wissen, sagen Sie es mir bitte. – user8504021

1

Auf Ihrem urls.py Dateien gibt es dieselben URLs für verschiedene Ansichten. Django wird nur die erste URL berücksichtigen. entfernen

 url(r'^$/',index,name='index'), 

von den Eltern wird das Problem

+0

thx, löschte ich URL des Index von Parent, aber NoReverseMatch at/Umfragen/ Reverse für 'Index' nicht gefunden. 'index' ist keine gültige Ansichtsfunktion oder kein Mustername. Fehler passieren. Wie kann ich das beheben? – user8504021

+0

Sorry, Sie sollten URL verwenden (r '^ $ /', views.index, name = 'index'), – Ananthu

+0

die Frage mit views.py aktualisieren – Ananthu

0

Nun lösen, Sie haben keine doppelten URLs, weil Sie mit Anwendungen arbeiten, so dass das Problem hier ist url(r'^$/',, was falsch ist der richtige Weg ist url(r'^$' die Grund ist, dass Sie immer das $ am Ende der URL setzen müssen, versuchen Sie es und sagen Sie mir

+0

es hat nicht funktioniert ... – user8504021

+0

Nun, wahrscheinlich haben Sie nicht die Indexansicht oder der Import ist falsch –