python - Django 动态 url

标签 python django django-urls

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

我的方法如下:我创建了一个名为 sitemanager 的应用程序它由上述页面模型和一个将页面添加到我的模板上下文(用于菜单等)的上下文处理器组成,并且工作正常。

当然,我还需要将它挂接到我的 url 文件中,但这就是麻烦的开始:感谢 Django 的 pythonic 结构,我可以检索 Page模型内urls.py ,并相应地生成我的 url 模式,它确实显示了,但 Django 似乎缓存了该文件(这通常是有意义的),因此只有在服务器重新启动后才会发生更改。这显然是 Not Acceptable 。

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

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

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

from sitemanager.models import Page
static_pages = Page.objects.filter(static=True)
article_pages = Page.objects.filter(static=False)
for page in static_pages:
    pattern = r'^/'+page.alias+'/$'
    urlpatterns += patterns('',
        url(pattern, 'views.static_page',
            { 'active': page }
        )
    )
# Pretty much the same for the article pages,
# but with includes of another app

我希望我在脑海中剥离代码时没有犯太多错误!

最佳答案

您可以使用 named groups在 url 中将数据传递给 View ,并且不需要在 url 中进行任何动态更新。包含 page.alias 的命名部分将作为关键字参数简单地传递给您的 View 函数。您可以使用它来获取实际的 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")

关于python - Django 动态 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9439899/

相关文章:

python - 比较不匹配的正则表达式的速度

python - NoReverseMatch 使用反向和带参数的 url

regex - 调整 Django URL 中的正则表达式以匹配文件路径

python - Django - 同一查询中的 objects.values() 和 prefetch_related()

python - 使用 ModelForms 时如何更新已存在的行?

django - 使用灵活的 url 模式在 Django 中进行单元测试

python - 按设置不匹配过滤数据帧组

python - Matplotlib 示例输出与网站显着不同

python - 使用 asyncio.create_subprocess_exec 设置最大并发数

python - 从上传的文件创建 OleFile 类型的文件