Este es mi url.py.
Código:
.. El problema surge con el url "respuesta", el último. Requiere de dos argumentos, "tema" y "post_id". Los últimos dos urls, el de post y el de respuesta están relativamente encadenados.from temas import views urlpatterns = patterns('', url(r'^$', views.main, name = 'main'), url(r'^nuevo_tema/$', views.nuevo_tema, name = 'nuevo_tema'), url(r'^(?P<titulo>\w+)/$', views.index_tema, name = 'index_tema'), url(r'^(?P<tema>\w+)/sumar_post/$', views.sumar_post, name = 'sumar_post'), url(r'^(?P<tema>\w+)/nuevo_post/$', views.nuevo_post, name = 'nuevo_post'), url(r'^(?P<tema>\w+)/post/(?P<post_id>\d+)/$', views.post, name = 'post'), url(r'^(?P<tema>\w+)/post/(?P<post_id>\d+)/respuesta$', views.respuesta, name = 'respuesta'), )
Este parte de html le pasa los datos tema y post al url pattern "post":
Código:
Luego esta función le pasa "tema" y "post" en un context al html de arriba:<ul> <li> Post: {{ post.texto }} </li> <li> Creador: {{ post.creador }} </li> <div> <form action = "{% url 'temas:respuesta' tema.nombre post.id %}" method = "POST"> {{form_respuesta.as_ul}} <imput type = "submit" value = "Responder"> </div> </ul>
Código:
Como pueden ver en el html, debajo del titulo y del creador del Post, paso un Form donde el usuario va a poner una respuesta. Ese form tiene como "action" al url "respuesta" y le pasa dos argumentos: tema.nombre y post.id.def post(request, tema, post_id): form_respuesta = FormNuevoPost() post = Posts.objects.get(id=post_id) context = {'tema': tema, 'post':post, 'form_respuesta': form_respuesta} return render(request, 'temas/post.html', context)
El url "respuesta" redirige a esta función de views.py:
Código:
Ok está un poco largo. def respuesta(request, tema, post_id): if request.method == "POST": form = FormNuevoPost(request.POST) if form.is_valid(): texto = form.cleaned_data.get('texto') perfil_usuario = Perfiles.objects.get(usuario=request.user) tema_contenedor = Temas.objects.get(nombre = tema) post_padre = Posts.objects.get(id=post_id) post_respuesta = Post(texto=texto, es_respuesta = True, creador = perfil_usuario, tema = tema_contenedor) respuesta_db = Respuestas(post_respuesta=post_respuesta, post_padre = post_padre) post_respuesta.save() respuesta_db.save() return HttpResponseRedirect(reverse('temas:post', args =(tema_contenedor.nombre, post_padre.id))) else: pass #!!! enviar errores else: tema = Temas.objects.get(nombre = tema) return HttpResponseRedirect(reverse('temas:post', args =(tema.nombre, post_id)))

El error es::
"Reverse for 'respuesta' with arguments '('', 4L)' and keyword arguments '{}' not found. 1 pattern(s) tried: [u'temas/(?P<tema>\\w+)/post/(?P<post_id>\\d+)/respuesta$']"
Y el traceback señala la línea del form:
<form action = "{% url 'temas:respuesta' tema.nombre post.id %}" method = "POST">
Como inicio del error..

Les agradezco cualquier sugerencia, incluso si me pueden plantear una manera de mejorar mi código.