Django CMS自定义插件从cms_title加载数据

我想为Django CMS创建一个自定义插件。正如guide显示的那样,我创建了一些示例。但是现在我们的目标是创建一个可以从(mysql)数据库获取数据的插件。它会加载属于菜单的所有标题,因为我想要与目录类似。Django CMS自定义插件从cms_title加载数据

要从自定义模型中获取数据,代码是这样的:

  • models.py:

    from cms.models.pluginmodel import CMSPlugin 

    from django.db import models

    class Hello(CMSPlugin):

    guest_name = models.CharField(max_length=50, default='Guest')

  • cms_plugins.py:

来自cms.plugin_ba的

SE进口CMSPluginBase

from cms.plugin_pool import plugin_pool 

from django.utils.translation import ugettext_lazy as _

from .models import Hello

class HelloPlugin(CMSPluginBase):

model = Hello

name = _("Hello Plugin")

render_template = "hello_plugin.html"

cache = False

def render(self, context, instance, placeholder):

context = super(HelloPlugin, self).render(context, instance, placeholder)

return context

plugin_pool.register_plugin(HelloPlugin)

但作为cms_title默认属于Django的CMS,哪些选项是可能的吗?我在哪里可以找到名称为Title的CMS模型的定义?将它设置为CMSPlugin实例会是一个糟糕的方法吗?

回答:

好吧,经过几个小时的这种情况下,我终于成功地解决了我的问题。

首先,用CMS模型和参数标题(在db:cms_title中)回答问题的部分。创建一个FK到CMS标题的新模型是正确的方法。 在models.py:

class TitlePlugin(CMSPlugin): 

title = models.ForeignKey(Title)

至于未来,你需要将其导入到cms_plugins.py,所以它看起来是这样的:

from .models import TitlePlugin 

class MyTitlePluginClass(CMSPluginBase):

model = TitlePlugin

render_template = "titles.html"

cache = False

正如你看到的,我们加载的模型是TitlePlugin,我们在models.py中定义(其中FK为原始cms_title)。

而现在,使其:

def render(self, context, instance, placeholder): 

context = super(MyTitlePluginClass, self).render(context, instance, placeholder)

return context

但我的目标是将其加载到模板“目录”的目的,对不对?所以我不得不改变一些事情。

我删除models.py内容

新cms_plugins.py有修改过(没有必要!): 第一:

from cms.models.pagemodel import Page 

#we import the Page model

和更新类:

class MyTitlePluginClass(CMSPluginBase): 

model = CMSPlugin

render_template = "titles.html"

cache = False

def render(self, context, instance, placeholder):

pages = Page.objects.filter(in_navigation=True, publisher_is_draft=False)

#context = {

#'pages' : pages,

#}

# edit: append to 'pages' existing list!

context['pages'] = pages

context = super(MyTitlePluginClass, self).render(context, instance, placeholder)

return context

plugin_pool.register_plugin(MyTitlePluginClass)

而在模板中,我们只需使用for循环01打印它titles.html:

{% for page in pages %} 

<div class="panel callout ">

{{ page }}

</div>

{% endfor %}

以上是 Django CMS自定义插件从cms_title加载数据 的全部内容, 来源链接: utcz.com/qa/266308.html

回到顶部