Django网站中存储的数据库URLs

1 投票
2 回答
3579 浏览
提问于 2025-04-15 15:03

我之前做过几个Django网站,但到现在为止,我一直是在urls.py文件里手动设置每个视图和URL。

现在我想创建一个小型的自定义内容管理系统(CMS),但在处理URL时遇到了麻烦。我有一个数据库表(SQLite3),里面存储了页面的代码,比如有一列是标题,有一列是右侧菜单,还有一列是内容,等等。我还有一列是URL。请问我该如何让Django根据存储在这一列的URL来调用数据库表中的信息,而不是为每个页面都写一个视图和URL(这显然违背了CMS的初衷)?

如果有人能告诉我文档的哪个部分或者哪个网站可以解释这个问题,那将会非常有帮助。

谢谢大家。

2 个回答

1

你的问题有点复杂,但我觉得你想问的是类似于django.contrib.flatpages的处理方式。简单来说,它使用了一种叫做中间件的东西来捕捉404错误,然后检查是否有任何flatpages的URL字段与之匹配。

我们在一个网站上做过类似的事情,所有的URL都做成了“搜索引擎友好”的格式。我们重写了save()方法,把标题处理成this_is_the_title.html(或者其他格式),然后把这个信息存储在一个单独的表里,这个表里有URL和对象的类/ID的对应关系。(这意味着它在中间件列表中会被列在flatpages之前)。

6

你不一定要按照平面页面的方式来做

对于那些需要被访问的模型,我是这样做的:

在urls.py文件里,我有一个网址映射,像这样:

  url(r'(?P<slug>[a-z1-3_]{1,})/$','cms.views.category_view', name="category-view")

在这个例子中,正则表达式 (?P<slug>[a-z1-3_]{1,}) 会返回一个叫做slug的变量,并把它传给我的视图 cms.views.category_view。在这个视图里,我这样查询:

@render_to('category.html')
def category_view(request, slug):
    return {'cat':Category.objects.get(slug=slug)}

(注意:我使用的是 annoying-decorator 中的 render_to – 它和 render_to_response 是一样的,只是更简短)

编辑 这个内容应该在 教程 中有讲到。在这里你可以找到 网址配置和调度 的详细信息。django书籍也有相关内容。还有,别忘了查看Python的正则表达式模块。

当然,你可以使用这段代码。

撰写回答