variable template examples django django-urls

django - template - El urlconf manager.urls incluido no tiene ningún patrón en él.



django template variable (1)

El problema es que su URLConf no ha terminado de cargarse antes de que su vista basada en clase intente revertir la URL (AddObjView.success_url). Tiene dos opciones si desea continuar usando el modo inverso en sus vistas basadas en clase:

a) Puedes crear un método get_success_url () para tu clase y hacer lo contrario desde allí

class AddObjView(CreateView): form_class = ObjForm template_name = ''manager/obj_add.html'' def get_success_url(): return reverse(''manager-personal_objs'')

b) Si está ejecutando en la versión troncal / dev de Django, entonces puede usar reverse_lazy reverse_lazy

from django.core.urlresolvers import reverse_lazy class AddObjView(CreateView): form_class = ObjForm template_name = ''manager/obj_add.html'' success_url = reverse_lazy(''manager-personal_objs'')

La opción "b" es el método preferido para hacer esto en futuras versiones de Django.

Una solución: encontré el siguiente fragmento de django que parece funcionar bien ( http://djangosnippets.org/snippets/2445/ )

from django.utils.functional import lazy from django.core.urlresolvers import reverse #Workaround for using reverse with success_url in class based generic views #because direct usage of it throws an exception. reverse_lazy = lambda name=None, *args : lazy(reverse, str)(name, args=args)

Aparentemente, ahora hay una función reverse_lazy en el tronco de django.

Actualización: este error tiene algo que ver conmigo haciendo una llamada para revertir dentro de una vista genérica:

class AddObjView(CreateView): form_class = ObjForm template_name = ''manager/obj_add.html'' success_url = reverse(''manager-personal_objs'')

¿Esto no es válido?

Si en lugar de genérico escribo algo como esto, funciona:

def add_obj(request, pk): a=reverse(''manager-personal-objs'') return HttpResponse(a)

Tengo un proyecto con 2 aplicaciones. Cada aplicación tiene sus urls y vistas. Ambos funcionan bien, pero en la aplicación del administrador, tan pronto como hago referencia a la función inversa en las vistas (cualquier vista), aparece el siguiente error: Tipo de excepción: Valor de excepción incorrectamente configurado: el urlconf manager.urls incluido no tiene cualquier patrón en ella

El archivo urls:

urlpatterns = patterns('''', url(r''^$'', ObjView.as_view(), name=''manager-obj''), url(r''^add/$'', AddObjView.as_view(), name=''manager-add_obj''), url(r''^personal/$'', PersonalObjsView.as_view(), name=''manager-personal_objs''),

)

Ubicación de excepción: ... sitio-paquetes / django / core / urlresolvers.py en _get_url_patterns, línea 283

Recibo este error en todo el sitio (edición: esto aparentemente ocurre porque un intento de importar manager.urls dará como resultado el error). Si elimino el include manager.urls, todo vuelve al trabajo; Si elimino la llamada a reversa, todo está bien; si trato de reescribir manager.urls a una versión más simple, continúa con el error.

He pasado por esto muchas veces, parece que no puedo encontrar nada malo.

Editar: root urls.py

# coding=utf8 from django.conf.urls.defaults import patterns, include, url from django.contrib.staticfiles.urls import staticfiles_urlpatterns from django.views.generic.simple import direct_to_template # Uncomment the next two lines to enable the admin: from django.contrib import admin admin.autodiscover() urlpatterns = patterns('''', # Uncomment the admin/doc line below to enable admin documentation: url(r''^admin/doc/'', include(''django.contrib.admindocs.urls'')), # Uncomment the next line to enable the admin: url(r''^admin/'', include(admin.site.urls)), # Home Page url(r''^$'', direct_to_template, {''template'': ''home.html''}, name="home"), # manager url(r''^manager/'', include(''manager.urls'')), # writing url(r''^writing/'', include(''writing.urls'')), ) urlpatterns += staticfiles_urlpatterns()

edit2: También se debe tener en cuenta que la etiqueta de la plantilla url funciona bien en la aplicación de administrador y la llamada inversa funciona si lo hago en la otra aplicación. Además, cada url tiene una vista de trabajo escrita.