我能在django做到这一点吗?管理员将页面作为模型与cms?

时间:2013-12-02 15:40:23

标签: python django django-cms

今天我刚坐火车,有空闲时间考虑django cms和admin。

我可以将页面定义为这样的模型:

class ArticlePage(models.Model):
  slug = models.TextField()
  content = models.TextField()
  online  = models.BooleanField()
  etc... 

然后在django admin中编辑此模型?因为,我认为,django cms也会以这种方式或多或少地起作用,对吗?

这会没事吗?

我被困的地方是我不知道如何为这些页面设置动态网址,因为我需要触摸urls.py,对吧?

1 个答案:

答案 0 :(得分:1)

理论上,您可以创建一个具有通配符作为URL的视图。然后让视图在ArticlePage中查找各种实际使用的URL。

def pageView(request, url):
    page = ArticlePage.objects.get(slug=url)
    ...
    return page.content

将网址指定为:

urlpatterns += patterns('articles.views',
    (r'^(?P<url>.+?)/$', 'pageView'),
) #Catch all URLs not yet matched and attempt to find them in the database.

urls.py

的末尾

然后您可以使用某种HTML编辑器来创建实际内容等等。

所以有可能。但问题是你想要吗? 可以从头开始在网站上创建一些页面并将HTML存储在数据库中。想想很少更新的小页面,但如果更新的话会严格改变。

但是,一般来说网站有一些结构。像博客文章,评论,民意调查,用户注册和其他互动页面。这些页面无法在包含HTML的数据库字段中描述。

虽然如果你确实设法做了所有这些,那么我担心你的理智,因为它一定是一条痛苦而尴尬的道路。

希望这有帮助。

<强>更新 如果要显示静态HTML页面,通常只需直接从urls.py中引用它们。通常很少有HTML直接存储在数据库中。通常,您只需将数据存储在数据库中。如果从CMS大量修改/保存/创建/提供HTML,您只需将其作为HTML文件存储在Web服务器的某个位置。

虽然人们当然可以想到将HTML页面放入数据库的原因,但是为什么你不应该这样做有相同的原因。这一切都归结为问题的细节。 例如。如果您允许用户创建带有链接/粗体/斜体等的注释,您可以在数据库中保存单词或//单词//并每次解析它。或者您可以解析一次,只将HTML存储在数据库中,这样您就不必每次都解析它。

对于较大的页面也是如此,尽管它们通常有太多的标记要经常通过CMS手动输入。

直接通过urls.py提供HTML页面:

E.g。

from django.views.generic import TemplateView

urlpatterns = patterns('',
    (r'^foo/$', TemplateView.as_view(template_name='foo.html')),
)

来源:How do I go straight to template, in Django's urls.py?