Я попробовал что-то подобное, взломав некоторые вещи в django.core.urlresolvers
- у меня это сработало, но учтите, что это хак . У меня до сих пор нет кода, но я сделал что-то вроде этого:
- Django обычно использует
urlresolvers.get_resolver()
для получения RegexURLResolver
, который отвечает за разрешение URL-адресов. Передача None
этой функции возвращает ваш «корневой» URLConf.
get_resolver()
использует кэш _resolver_cache
для загруженных URLConfs.
- Сброс
_resolver_cache
должен заставить Django воссоздать чистый URLResolver.
В качестве альтернативы вы можете попытаться сбросить атрибут _urlconf_module
корня RegexURLResolver
, что должно заставить Django перезагрузить его (хотя и не уверен в этом, возможно, модуль будет кэшироваться Python).
from urlresolvers import get_resolver
delattr(get_resolver(None), '_urlconf_module')
Опять же, не гарантируется, что это будет работать (я работаю из памяти из кода, который я по какой-то причине явно отбросил). Но django / core / urlresolvers.py - это определенно файл, который вы хотите просмотреть.
РЕДАКТИРОВАТЬ: Решил поэкспериментировать с этим, и это не сработало ...
EDIT2:
Как я и думал, ваши модули URL будут кэшироваться Python. Простая перезагрузка их по мере их изменения может работать (используя reload
). Если, ваша проблема в том, что вы динамически создаете urlpatterns
на основе некоторых данных, которые могут измениться.
Я попытался reload
использовать мои корневые URL-адреса (project.urls) и модуль suburl (app.urls). Это все, что мне нужно было сделать, чтобы новые URL отображались get_resolver(None).url_patterns
Так что хитрость может быть такой простой: перезагрузите модуль URL вручную.