将您的 django CMS 项目作为单页应用程序 (SPA) 运行
项目描述
将您的 django CMS 项目作为单页应用程序 (SPA) 运行。这个包提供了一个 REST-API,它返回所有被序列化为 JSON 的页面内容。一些帮助程序和基类可用于为自定义视图创建 API 端点。djangocms-spa被构建为将它与具体实现一起使用:
快速开始
安装 djangocms_spa:
pip install djangocms-spa
将其添加到您的INSTALLED_APPS:
INSTALLED_APPS = (
...
'djangocms_spa',
...
)
添加 Locale 中间件(如果还没有):
MIDDLEWARE = (
...
'django.middleware.locale.LocaleMiddleware',
)
设置默认模板:
DJANGOCMS_SPA_DEFAULT_TEMPLATE = 'pages/content.html'
设置变量DJANGOCMS_SPA_TEMPLATES需要一个模板字典。它应该涵盖CMS_TEMPLATES的所有模板,并使用路径作为键。前端组件名称和部分列表(例如静态占位符)是有效选项。
DJANGOCMS_SPA_TEMPLATES = {
'pages/content.html': {
'frontend_component_name': 'content',
'partials': ['menu', 'meta', 'footer']
},
'pages/content_with_section_navigation.html': {
'frontend_component_name': 'content-with-section-navigation',
'partials': ['menu', 'meta', 'footer']
},
}
配置您的自定义部分:
DJANGOCMS_SPA_PARTIAL_CALLBACKS = {
'menu': 'djangocms_spa.partial_callbacks.get_cms_menu_data_dict'
}
在模板中呈现初始应用程序版本(提交哈希),以便您的客户可以检查它:
{% load app_version_tags %}
{% app_version %}
插件
您的插件不需要渲染模板,而是需要返回字典的render_spa方法。为了有一个干净的结构,我们通常将上下文放在字典的内容键中:
class TextPlugin(JsonOnlyPluginBase):
name = _('Text')
model = TextPluginModel
frontend_component_name = 'cmp-text'
def render_spa(self, request, context, instance):
context = super(TextPlugin, self).render_spa(request, context, instance)
context['content']['text']. = instance.text
return context
plugin_pool.register_plugin(TextPlugin)
设置
CACHE_TIMEOUT(默认:60 * 10)
如果您使用缓存后端,API 响应将被缓存。
DJANGOCMS_SPA_DEFAULT_TEMPLATE(默认值:'index.html')
DEFAULT_LIST_CONTAINER_NAME(默认值:'object_list')
列表视图使用此键对其数据进行分组。
CMS_PAGE_DATA_POST_PROCESSOR(默认值:无)
此挂钩允许您通过定义模块路径来对 CMS 页面的数据进行后处理。
PLACEHOLDER_DATA_POST_PROCESSOR(默认值:无)
这个钩子允许你通过定义一个模块路径来对占位符的数据进行后处理。
偏音
我们将用于渲染模板的全局页面元素称为“部分”。部分内容不会从一页更改到另一页。在 django CMS 项目中,partials 被实现为静态占位符。因为我们不渲染任何 HTML 模板,所以我们需要将 DJANGOCMS_SPA_TEMPLATES中每个模板的静态占位符配置为部分。要编辑占位符和静态占位符数据,您需要在编辑模式下渲染两者:
{% if request.toolbar.edit_mode_active %}
{% placeholder "main" %}
{% static_placeholder "footer" %}
{% endif %}
通常还有其他部分,如菜单或任何其他模板标签,它们的工作方式与静态占位符非常相似。因为我们没有允许我们呈现模板标签的模板,所以我们需要有一个自定义实现来满足这些需求。我们决定使用回调方法,允许开发人员将自定义数据带入部分列表。通过添加部分键和回调函数的模块路径,在DJANGOCMS_SPA_PARTIAL_CALLBACKS中定义您的回调。您将在djangocms_spa/partial_callbacks.py中找到一个示例。你的函数应该返回一个像这样的字典:
{
'type': 'generic',
'content': {
'my_var': 1
}
}
学分
用于渲染此包的工具: