Soy bastante nuevo en python y lo sigo junto con la parte 4 del tutorial para el framework Django here. Estoy tratando de poner en práctica las vistas genéricas para la aplicación de las encuestas - mi código parece correcto (por lo que yo puedo decir), pero cuando trato de votar, me sale una excepción NoReverseMatch que dice:NoReverseMatch Excepción ayuda en Django
inversa para 'polls/poll_results' con argumentos '(1L,)' y argumentos de palabras clave '{}' no encontrados.
Mi código funcionaba perfectamente antes de intentar las vistas genéricas, pero parece que no puedo identificar el problema ahora.
Aquí está el código para mi urls.py en el directorio de sondeo:
from django.conf.urls.defaults import *
from djtest.polls.models import Poll
info_dict = {
'queryset': Poll.objects.all(),
}
urlpatterns = patterns('',
(r'^$', 'django.views.generic.list_detail.object_list', info_dict),
(r'^(?P<object_id>\d+)/$', 'django.views.generic.list_detail.object_detail', info_dict),
url(r'^(?P<object_id>\d+)/results/$', 'django.views.generic.list_detail.object_detail', dict(info_dict, template_name='polls/results.html'), 'poll_results'),
(r'^(?P<poll_id>\d+)/vote/$', 'djtest.polls.views.vote'),
)
Y aquí es el views.py:
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
from django.core.urlresolvers import reverse
from djtest.polls.models import Poll, Choice
def vote(request, poll_id):
p = get_object_or_404(Poll, pk=poll_id)
try:
selected_choice = p.choice_set.get(pk=request.POST['choice'])
except (KeyError, Choice.DoesNotExist):
#redisplay form
return render_to_response('polls/poll_detail.html', {
'object': p,
'error_message': "You didn't select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
Tengo la sensación de que es un error sintáctico, pero no puedo encontrarlo Gracias de antemano por cualquier ayuda ...
Gracias - eso funcionó. ¿Podría explicar cómo difiere de la versión del tutorial y por qué no funcionaba antes? – mportiz08
No sé sobre el tutorial. Pero parece que la vista genérica está usando argumentos de palabra clave. El resolver inverso combina args y kwargs por separado, por lo que cuando pasa args, no coincide con la vista que usa kwargs. Pero cuando pasas kwargs, funciona. ¿Tener sentido? – bstpierre
Sí, muchas gracias! – mportiz08