2013-10-12 9 views
9

Sto seguendo il tutorial ufficiale per imparare Django e utilizzare 1.5.Django: Reverse per 'dettagli' con argomenti '(' ',)' e argomenti parola chiave '{}' non trovati

ho avuto questo link come parte del mio modello di indice, che stava lavorando bene:

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

tuttavia, questo è hardcoded e il tutorial suggerito un modo migliore era quello di utilizzare:

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

in modo che tu stia meglio quando hai a che fare con un numero enorme di modelli e devi apportare modifiche all'URL.

Da quando ho fatto il cambiamento sopra ottengo i seguenti errori quando si esegue l'applicazione:

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

mio urls.py si presenta così:

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 assomiglia a questo:

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}) 

mio modello index.html si presenta così:

0.123.

Di solito posso facilmente leggere da dove proviene l'errore e gestirlo ma in questo caso non riesco a individuare la causa dell'errore, quindi non sono in grado di progredire con il mio studio. Qualsiasi aiuto sarà molto apprezzato.

+0

Una cosa che ho notato è che usi la notazione namespace ('polls: detail') in' index.html', ma non definisci 'polls' come spazio dei nomi nel tuo' urlpatterns'. Prova a renderlo solo 'detail' senza' polls: 'per un momento. E non dovresti 'poll_id' essere' poll.id' lì? –

+0

grazie mille .. Il problema era con poll_id invece di poll.id. ora funziona. Puoi metterlo come risposta in modo che io possa accettarlo? grazie ancora – fromPythonImportNoob

risposta

16

Nel tuo index.html hai fornito come argomento poll_id, ma questo è solo il nome che l'argomento avrà all'interno della funzione detail; non è definito nel tuo modello. Il valore effettivo con cui si desidera chiamare la funzione è probabilmente poll.id.

0

Ho lottato con questo per un po '. Poi ho notato che avevo inserito poll.id e non Poll.id con una (maiuscola P)

+3

dovrebbe essere una p minuscola in poll.id non è una lettera maiuscola, la maiuscola è usata per i nomi delle classi –

0

Questo è successo a me mentre stavo leggendo il tutorial. Non ho cambiato poll_id alla pk:

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

vs

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

mio errore è stato un errore di battitura sul detail.html:

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

avrebbe dovuto essere

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

E ' mi ci è voluto un po 'per realizzare t he La pagina di django traceback mi stava indicando la riga di codice pertinente per tutto il tempo. : $

0

anche, in

sondaggi/URL.py

ho avuto errore di ortografia

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

vs il codice corretto

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

trascorso un po 'di tempo a cercare l'errore, quindi cercare l'ortografia corretta. lol