Django动态网址

时间:2012-02-25 00:18:24

标签: python django django-urls

我正在开发一个使用Django作为后端的网站,我想让客户使用管理界面添加新页面 - 所以他输入了一个页面标题,一个用于更好网址的页面别名,并选择是否他想要静态内容或基于文章的结构。

我的方法如下:我创建了一个名为sitemanager的应用程序,它包含上述页面模型,以及一个上下文处理器,用于将页面添加到我的模板上下文中(用于菜单等)这很好。

当然,我还需要将它挂钩到我的url文件中,但是这里是麻烦开始的地方:由于Django的pythonic结构,我可以在{{1}内检索Page模型并且相应地生成我的url模式,它确实显示,但是Django似乎缓存了该文件(通常是有意义的),因此只有在服务器重启后才会进行更改。这显然是不可接受的。

我的第一个想法是以某种方式使管理员应用程序重置url缓存,如果添加或删除新页面,或修改别名(并且只有这样,因为缓存通常是一件好事),但我不知道如何从那里开始。

或者也许还有一个我目前没有看到的更简单的解决方案?

urls.py的相关部分看起来基本上是这样的:

urls.py

我希望在我的头脑中剥离代码时,我没有犯过太多错误!

2 个答案:

答案 0 :(得分:15)

您可以在网址中使用named groups将数据传递到视图,并且不需要在网址中进行任何动态更新。包含page.alias的命名部分将作为关键字参数传递给您的视图函数。您可以使用它来获取实际的Page对象。

# urls.py
urlpatterns += patterns('',
   (r'^(?P<page_alias>.+?)/$', 'views.static_page'),
)

# views.py
def static_page(request, page_alias):    # page_alias holds the part of the url
    try:
        active = Page.objects.get(page_alias=page_alias)
    except Page.DoesNotExist:
        raise Http404("Page does not exist")

答案 1 :(得分:2)

整个数据库中的每个项目都不需要特定的URL。

如果没有看到您的观点,我猜您可以使用一个网址,或者可能是一些网址。

举个例子:

#urls.py
urlpatterns = patterns('yourapp.views',
url(r'^static_pages/(?P<static_pages_id>\d+)/(?P<True_or_False>\D+)$', your_view_here, name='your_name_here'),
)

#views.py
def your_view_here(request, static_pages_id, True_or_False):
    obj = get_object_or_404(Page, pk=static_pages_id)
    if True_or_False:
        #do something when True