Próbuję przekierować użytkownika, aby edytować szczegółyzadania po przesłaniu zadania, ale mam problemy z przekierowaniem na stronę opartą na nowo utworzonym pliku. Każdy widok działa bez zwracanej linii HttpResponseRedirect. Próbowałem również arge = (instance.id) i kwargs = (instance.id) dla zmiennej.
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"),
Odpowiedzi:
1 dla odpowiedzi № 1return HttpResponseRedirect(reverse("task_values", kwargs={"task_id": instance.id}))
Pamiętaj też, że nie musisz dwukrotnie zapisywać zadania.
Edytować OK, jest inny problem. Nie podano konkretnych nazw adresów URL, co oznacza, że jedynym sposobem ich identyfikacji jest przekazanie w pełni kwalifikowanej nazwy widoku:
reverse("core.views_entry.task_values", kwargs=...)
Lub, lepiej, użyj url()
funkcja do nazwania twojego adresu URL:
url(r"^task/(?P<task_id>d+)/$","task_values", name="task_values"),
i możesz użyć oryginalnej wersji, którą podałem powyżej.
Zauważ, że błąd nie mówi ci, że to będzie enter/<id>/
, właśnie w tym widoku próbuje utworzyć odwrotny adres URL dla przekierowania i błędu.