get_context_data - reverse_lazy django
Invertir para success_url en Django Class Based View queja sobre importaciĆ³n circular (2)
El uso de reverse
en su método funciona porque se reverse
cuando se ejecuta la vista.
def my_view(request):
url = reverse(''blog:list-post'')
...
Si anula get_success_url
, entonces aún puede usar reverse
, porque get_success_url
reverse
cuando se ejecuta la vista.
class BlogCreateView(generic.CreateView):
...
def get_success_url(self):
return reverse(''blog:list-post'')
Sin embargo, no puede usar reverse
con success_url
, porque entonces se llama a la reverse
cuando se importa el módulo, antes de que se hayan cargado las URL.
get_success_url
es una opción, pero la solución más sencilla es usar reverse_lazy
lugar de reverse.
from django.urls import reverse_lazy
# from django.core.urlresolvers import reverse_lazy # old import for Django < 1.10
class BlogCreateView(generic.CreateView):
...
success_url = reverse_lazy(''blog:list-post'')
Para responder a su pregunta final acerca de reiniciar el servidor de ejecución, el error de configuración ImproperlyConfigured
es diferente de TemplateDoesNotExists
porque ocurre cuando se carga la aplicación Django.
Cuando se utiliza la vista basada en el método, la redirección a la reverse
no se quejó de esto y aún puede encontrar la raíz url conf. Pero, en vistas basadas en la clase, se queja:
ImproperlyConfigured at /blog/new-post/
The included urlconf ''blog.urls'' does not appear to have any
patterns in it. If you see valid patterns in the file then the
issue is probably caused by a circular import.
Mi clase se define así:
class BlogCreateView(generic.CreateView):
form_class = Blog
template_name = ''blog/new-post.html''
success_url = reverse(''blog:list-post'')
¿Cómo usar correctamente el reverse
para success_url
en vistas basadas en clase? Gracias.
PS: Y estoy interesado en por qué es necesario reiniciar runserver
después de este error (no como un error como TemplateDoesNotExists
que no es necesario reiniciar runserver
)
Intente usar reverse_lazy
lugar de reverse
en su CBV. Es una versión de reverse
perezosamente evaluada. No se ejecutará hasta que se necesite el valor.
from django.core.urlresolvers import reverse_lazy
class BlogCreateView(generic.CreateView):
form_class = Blog
template_name = ''blog/new-post.html''
success_url = reverse_lazy(''blog:list-post'')