Django:运行时url配置

时间:2009-09-22 18:06:13

标签: django url-routing

如果有一种无痛的运行时urlconf修改方式?例如基于数据库记录?

Bruteforce soluttion:

r('^(.*)/', handmade_router_function)

对我来说太残酷了:))

提前致谢!

UPD: 我知道我可以直接从我的代码修改urlpatterns,但它需要大量的手动编码(自定义管理员保存操作,删除处理程序等)。我想知道是否有一个可以使用的应用程序/库:)

3 个答案:

答案 0 :(得分:2)

Django中有一个贡献应用程序已经这样做,它被称为FlatPages。它通过注册中间件来工作。当请求页面时,如果找不到它,则抛出404被中间件捕获。中间件在数据库中查找页面,如果发现它为页面提供服务,如果没有,则会抛出404。

答案 1 :(得分:0)

您是否尝试在运行时修改“urlpatterns”变量?

答案 2 :(得分:0)

这样的事情有效。您将迭代不同的东西,例如您提到的模型实例,但前提是相同的:

for path in ["foo", "bar"]:
    urlpatterns += patterns("myapp.views", url(r"^%s/$" % path, "index", {}, name=path))

我将此代码放在我的urls.py中。这会导致以下内容映射到视图:

http://127.0.0.1:8000/foo/
http://127.0.0.1:8000/bar/

有些注意事项:

  1. 我不确定您的观点是什么,所以这只是调用名为index的视图。
  2. 我在各自的path参数之后命名URL;你可以选择以不同的方式命名。