我有一个django网站。与所有标准站点一样,它使用URLConfs将URL与视图相关联。但是,除此之外,我还有一些URL配置,我可以从数据库中的数据动态生成这些配置。一切都按照我的意愿运作。
是否可以在网站运行时从代码重新加载所有URLConfs?如果有人更新数据库并更改网站中的某些网址,我想触发所有网址的“重新发现”。这将导致我的代码动态地从数据库中的数据重新创建URL。
目前,生成的URL可以位于URL层次结构中的任何位置。它们不是全部在一个前缀下,例如/ dynamic/
等。但是,如果这对我需要完成的工作是绝对必要的,我可以将所有动态URL放在一个前缀下。
在重新发现网址时,网站可能会有一些停机时间。
我如何触发所有URLConfs的重新加载?
答案 0 :(得分:5)
您的问题始于大多数Django程序员不接受的前提:您可以或应该从数据库动态创建URL。如果你这样做,你做错了。
您的网址格式是代码的一部分,而不是数据。显然,URL本身是通过将模式与数据组合而形成的 - 例如foo/<slug>/bar/
,但是当添加新的slug时不需要重新加载,因为它是由视图解析的,而不是URL处理器。
答案 1 :(得分:0)
import sys
from django.conf import settings
from django.core.urlresolvers import clear_url_caches
clear_url_caches()
reload(sys.modules[settings.ROOT_URLCONF])