Intenté algo así pirateando algunas cosas en django.core.urlresolvers
- funcionó para mí, pero tenga en cuenta que es un truco . Yo no sigo con el código, pero hice algo como esto:
- Django normalmente usa
urlresolvers.get_resolver()
para obtener una RegexURLResolver
que se encarga de resolver las direcciones URL. Al pasar None
a esta función obtiene su "raíz" URLConf.
get_resolver()
utiliza un caché, _resolver_cache
, por URLconfs cargados.
- Restablecimiento
_resolver_cache
debería obligar a Django para recrear un URLresolver limpio.
Alternativamente, es posible que trate de desarmar el atributo _urlconf_module
de la raíz RegexURLResolver
, que debe obligar a Django para recargarlo (no estoy seguro acerca de esto, sin embargo, es posible que el módulo se almacenan en caché por Python).
from urlresolvers import get_resolver
delattr(get_resolver(None), '_urlconf_module')
Una vez más, no se garantiza que esto va a funcionar (Estoy trabajando desde la memoria de código que he descartado, obviamente, por alguna razón). Pero django/core/urlresolvers.py es definitivamente el archivo que querrás mirar.
EDIT: decidió experimentar algunos con esto y no funcionó ...
Edit2:
Mientras pensaba, sus módulos de URL se almacenan en caché por Python. Simplemente volver a cargarlos a medida que cambian podría funcionar (usando reload
). Si su problema es que construye dinámicamente urlpatterns
según algunos datos que pueden cambiar.
me trataron reload
ing mis URL raíz (project.urls) y un módulo suburl (app.urls). Eso es todo lo que tuve que hacer para que las nuevas URL se muestren en get_resolver(None).url_patterns
Así que el truco podría ser así de simple: recargue manualmente su módulo de URL.
¿Está usando 'mod_wsgi'? Si es así, puede reiniciar su aplicación sin reiniciar todo el servidor Apache. –
@ S. Lott para el servidor de producción sí, por lo que esto podría funcionar, ¿cómo reiniciar una aplicación específica? ¿Hay algo similar para el servidor de desarrollo? –
@ S.Lott, para 'servidor de desarrollo' me refiero al servidor de desarrollo integrado que viene con Django, por ejemplo: python manage.py runserver. Sin embargo, es posible que haya malinterpretado su primer comentario, ¿sugirió que es posible reiniciar una sola aplicación de Django sin reiniciar las otras aplicaciones, o estaba sugiriendo que puede reiniciar las aplicaciones Django/All sin tener que reiniciar Apache? Tendría que hacer lo primero. –