Динамическая перезагрузка URLConfs для работающего сайта - PullRequest
3 голосов
/ 07 декабря 2011

У меня есть сайт Django. Как и все стандартные сайты, он использует URLConfs для связи URL-адресов с представлениями. Однако, в дополнение к этому, у меня есть некоторые настройки URL, которые я динамически генерирую из данных в базе данных. Все работает, как хотелось бы.

Можно ли перезагрузить все URLConfs во время работы сайта из кода? В случае, если кто-то обновит базу данных и изменит некоторые URL-адреса на сайте, я хотел бы вызвать «повторное обнаружение» всех URL-адресов. Это заставило бы мой код динамически воссоздавать URL-адреса из данных в БД.

В настоящее время сгенерированные URL-адреса могут находиться в любом месте иерархии URL-адресов. Они не все под одним префиксом, таким как / dynamic/ или таким. Однако, если это абсолютно необходимо для выполнения того, что мне нужно, я могу разместить все динамические URL-адреса под одним префиксом.

Допускается некоторое время простоя для сайта, пока происходит повторное обнаружение URL.

Как мне вызвать такую ​​перезагрузку всех URLConfs?

Ответы [ 2 ]

5 голосов
/ 07 декабря 2011

Ваш вопрос начинается с предпосылки, которую большинство программистов Django не примет: вы можете или должны динамически создавать URL-адреса из базы данных.Если вы делаете это, вы делаете это неправильно.

Ваши шаблоны URL являются частью кода, а не данных.Очевидно, что сами URL формируются путем объединения шаблонов с данными - например, foo/<slug>/bar/, но это не требует перезагрузки при добавлении новых слагов, потому что это разрешается представлением, а не обработчиком URL.

0 голосов
/ 12 августа 2018
import sys    
from django.conf import settings
from django.core.urlresolvers import clear_url_caches

clear_url_caches()
reload(sys.modules[settings.ROOT_URLCONF])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...