wake-up-neo.com

Django: Umkehren für 'Detail' mit Argumenten ('',) 'und Schlüsselwortargumenten' {} 'nicht gefunden

Ich folge dem offiziellen Tutorial, um Django zu lernen und benutze 1.5.

Ich hatte diesen Link als Teil meiner Indexvorlage, der gut funktionierte:

<li><a href="/polls/{{ poll.id }}/">{{ poll.question }}</a></li>

dies ist jedoch hartcodiert und das Tutorial schlug vor, einen besseren Weg zu verwenden:

<li><a href="{% url 'detail' poll.id %}">{{ poll.question }}</a></li>

so können Sie besser mit einer großen Anzahl von Vorlagen umgehen und müssen Änderungen an der URL vornehmen.

Da ich die oben genannte Änderung vorgenommen habe, werden beim Ausführen der App die folgenden Fehler angezeigt:

Exception Type: NoReverseMatch
Exception Value:    Reverse for 'detail' with arguments '('',)' and keyword arguments '{}' not found.

Meine urls.py sieht so aus:

from Django.conf.urls import patterns, url

from polls import views

urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
    url(r'^(?P<poll_id>\d+)/$', views.detail, name='detail'),
    url(r'^(?P<poll_id>\d+)/results/$', views.results, name='results'),
   url(r'^(?P<poll_id>\d+)/vote/$', views.vote, name='vote'),                     
)

views.py sieht so aus:

from Django.shortcuts import render, get_object_or_404
from Django.http import Http404

from polls.models import Poll

def index(request):
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
    context = {'latest_poll_list': latest_poll_list}
    return render(request, 'polls/index.html', context)


def detail(request, poll_id):
    poll = get_object_or_404(Poll, pk = poll_id)
    return render(request, 'polls/detail.html', {'poll': poll})

meine index.html Vorlage sieht so aus:

{% if latest_poll_list %}
    <ul>
    {% for poll in latest_poll_list %}
        <li><a href="{% url 'polls:detail' poll_id %}">{{ poll.question }}</a></li>
    {% endfor %}
    </ul>
{% else %}
    <p> No polls are available.</p>
{% endif %}

Normalerweise konnte ich leicht erkennen, wo der Fehler herkommt und damit umgehen, aber in diesem Fall kann ich die Fehlerursache nicht erkennen. Daher kann ich mein Studium nicht fortsetzen. Jede Hilfe wird sehr geschätzt.

12

In Ihrem index.html haben Sie poll_id als Argument angegeben, aber das ist nur der Name, den das Argument in der detail-Funktion haben wird. Es ist nicht in Ihrer Vorlage definiert. Der tatsächliche Wert, mit dem Sie die Funktion aufrufen möchten, ist wahrscheinlich poll.id.

19
Thijs van Dien

Mein Fehler war ein Tippfehler bei detail.html:

<form action={% url 'polls:vote' polls.id %}" method="post">

gewesen sein sollte

<form action={% url 'polls:vote' poll.id %}" method="post">

Es dauerte eine Weile, bis ich die Django-Traceback-Seite erkannte die mich die ganze Zeit auf die entsprechende Codezeile verwies. : $

7
dmvianna

Das passierte mir, als ich das Tutorial las. Ich habe poll_id nicht in pk geändert:

url(r'^(?P<poll_id>\d+)/$', views.DetailView.as_view(), name='detail'),

vs

url(r'^(?P<pk>\d+)/$', views.DetailView.as_view(), name='detail'),
1
Vanuan

Ich kämpfte eine Weile damit. Dann bemerkte ich, dass ich poll.id und nicht Poll.id mit (Capital P) gesetzt hatte.

0
samgichuru

Der Fehler wurde für mich behoben, nachdem die Filterbedingung in views.py korrigiert wurde.

ausschnitt meiner Ansichten.py

def post_share(request, post_id):
        post = get_object_or_404(Post, id=post_id, status='Published')

ausschnitt aus meinem models.py

class Post(models.Model):
STATUS_CHOICES=(
                ('draft','Draft'),
                ('published','Published'),
                )

Der erste Wert wird in der Datenbank gespeichert und der zweite Wert wird den Benutzern angezeigt.

rohdaten aus meiner mysql DB

+---------------------------------------+-----------+
| title                                 | status    |
+---------------------------------------+-----------+
| Revolution 2020                       | published |
| harry potter and the sorcerer's stone | published |
| harry potter and the cursed child     | draft     |
| five point someone                    | published |
| half girlfriend                       | draft     |
| one night at the call center          | published |
| Django by example                     | published |
+---------------------------------------+-----------+

Als ich " Published " verwendet hatte, bekam ich den besagten Fehler. Nachdem ich den Filter auf " Published " geändert hatte, wurde alles geklärt.

0
Sharath K P

auch in 

polls/urls.py

ich hatte einen Schreibfehler

uRL (r '^ (? P [0-9] +)/$', views.detail, name = 'detail s '),

gegen den korrekten Code

uRL (r '^ (? P [0-9] +)/$', views.detail, name = 'detail'),

verbrachte einige Zeit mit der Suche nach dem Fehler, also auf korrekte Schreibweise achten. lol

0
VeganxEdge