我是 django-cms 的绝对初学者,刚刚获得了一些创建模板的知识。只是想知道,如何创建一个门户页面,在每个不同的类别中都有一些文章?
请简单地指出一种实用的方法,不需要真正的代码。
谢谢你。
我是 django-cms 的绝对初学者,刚刚获得了一些创建模板的知识。只是想知道,如何创建一个门户页面,在每个不同的类别中都有一些文章?
请简单地指出一种实用的方法,不需要真正的代码。
谢谢你。
正如其他人所指出的,这样做的方法是将您的 CMS 页面连接到另一组视图。Django-CMS 提供了应用程序钩子:
#cms_app.py
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
class YourModuleApp(CMSApp):
name = 'My App MOdule'
urls = ['my_app.urls']
apphook_pool.register(YourModuleApp)
因此,如果您有一个名为“my_app”的模块,其中包含 urls.py,Django-CMS 会将这些模式添加到页面中。在管理员页面的“高级设置”部分查看应用程序下拉菜单。
一旦应用程序与页面挂钩,Django-CMS 将从它所拥有的信息中提取任何内容和布局模板,然后将处理交给与之挂钩的其他 URL 模式。这就是你可以引入另一个模型、添加表单、处理 POST 等的方式。
你可以按照正常的 Django 方式来做。创建一个普通的 Django 应用程序,其 URL 指向呈现模板的视图。视图可能如下所示:
from django.shortcuts import render
from cms.models import Page
def articles(request):
pages = Page.objects.public()
render(request, 'example.html', {'pages': pages})
模板可能如下所示:
{% load cms_tags %}
{% for page in pages %}
<p><a href="{{ page.get_absolute_url }}">{% page_attribute "page_title" page %}</a></p>
{% endfor %}
你可以在这里停下来。或者你可以...
您是否希望您的非开发人员内容经理能够将文章列表放在任何他们想要的地方?这就是AppHooks的用武之地。
在文件中创建一个CMSApp
类,appname/cms_app.py
如下所示:
from cms.app_base import CMSApp
from cms.apphook_pool import apphook_pool
from django.utils.translation import ugettext_lazy as _
class ArticleListApp(CMSApp):
app_name = 'articlelist'
name = _('Article List')
def get_urls(self, page=None, language=None, **kwargs):
return ['articlelist.urls']
apphook_pool.register(YourModuleApp)
删除项目范围内的 URL 条目,urls.py
因为您不再需要它。您的应用urls.py
需要包含 regex 的视图^$
。
现在您或任何具有必要权限的内容管理员用户可以在管理界面中创建一个页面,并修改高级设置以选择“文章列表”应用程序:
一个问题是,在页面(以及它的所有祖先页面)发布之前,这将不起作用。