Estoy tratando de redirigir al usuario para editar detallesde una tarea tras otra, pero estoy teniendo problemas para redirigir a una página basada en el pk recién creado. Cada vista funciona sin la línea HttpResponseRedirect de retorno. También he intentado arge = (instance.id) y kwargs = (instance.id) para la variable.
views.py
...
from django.http import HttpResponseRedirect, HttpResponseServerError, HttpResponseForbidden, Http404, HttpResponse
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404,render
...
def new_task(request):
...
...
task.save()
instance = task.save()
return HttpResponseRedirect(reverse("task_values", instance.id))
def task_values(request, task_id):
...
urls.py
from django.conf.urls.defaults import patterns, include, url
from django.http import HttpResponseRedirect
from django.views.generic.simple import direct_to_template
urlpatterns += patterns("core.views_entry",
#Task viewing/editing
(r"^task/(?P<task_id>d+)/$","task_values"),
(r"^enter/$","new_task"),
Respuestas
1 para la respuesta № 1return HttpResponseRedirect(reverse("task_values", kwargs={"task_id": instance.id}))
También tenga en cuenta que no necesita guardar la tarea dos veces.
Editar De acuerdo, hay otro problema. No le han dado nombres específicos a sus URL, lo que significa que la única forma de identificarlos es pasar el nombre de vista completo:
reverse("core.views_entry.task_values", kwargs=...)
O, mejor, usa el url()
función para nombrar su URL:
url(r"^task/(?P<task_id>d+)/$","task_values", name="task_values"),
y puedes usar la versión original que te di arriba.
Tenga en cuenta que el error no le está diciendo que va a enter/<id>/
, solo que en esa vista está intentando crear la URL inversa para la redirección y falla.