今天我刚坐火车,有空闲时间考虑django cms和admin。
我可以将页面定义为这样的模型:
class ArticlePage(models.Model):
slug = models.TextField()
content = models.TextField()
online = models.BooleanField()
etc...
然后在django admin中编辑此模型?因为,我认为,django cms也会以这种方式或多或少地起作用,对吗?
这会没事吗?我被困的地方是我不知道如何为这些页面设置动态网址,因为我需要触摸urls.py,对吧?
答案 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')),
)