为正在运行的站点动态重新加载URLConfs

时间:2011-12-07 17:23:37

标签: python django

我有一个django网站。与所有标准站点一样,它使用URLConfs将URL与视图相关联。但是,除此之外,我还有一些URL配置,我可以从数据库中的数据动态生成这些配置。一切都按照我的意愿运作。

是否可以在网站运行时从代码重新加载所有URLConfs?如果有人更新数据库并更改网站中的某些网址,我想触发所有网址的“重新发现”。这将导致我的代码动态地从数据库中的数据重新创建URL。

目前,生成的URL可以位于URL层次结构中的任何位置。它们不是全部在一个前缀下,例如/ dynamic/等。但是,如果这对我需要完成的工作是绝对必要的,我可以将所有动态URL放在一个前缀下。

在重新发现网址时,网站可能会有一些停机时间。

我如何触发所有URLConfs的重新加载?

2 个答案:

答案 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])