现有模型的Django-cms插件

时间:2016-05-02 12:15:08

标签: python django plugins django-cms

我有一个django项目,其中有' news'应用。 这是模型:

class News(models.Model):
   title = CharField(max_length=255)
   content = TextField()

如何将django-cms添加到此项目中以便能够直接在模板中修改新闻?我知道我需要一个基于' news'的自定义插件。模特,在这里我有两个选择: 1)我可以描述' news'的所有领域。单个插件中的模型,但是会有一个窗口一次编辑所有字段。

插件,描述所有字段:

class NewsPlugin(CMSPlugin):
    title = CharField(max_length=255)
    content = TextField()
    def __unicode__(self):
        return self.title

2)第二个想法是为“新闻”中的每个单独字段编写插件。并将它们组合在另一个插件中,但我不知道如何实现它。

单独的新闻标题插件:

class NewsTitle(CMSPlugin):
    title = CharField(max_length=255)

单独插入新闻内容:

class NewsContent(CMSPlugin):
    content = TextField()

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您可能想要考虑的是插件的替代方案,我发现它与新闻应用程序非常适用。

您可以将新闻内容字段更改为PlaceholderField,这样您就可以将插件添加到新闻项目中,还可以使用标准模板占位符可用的所有常用选项配置占位符配置。

在我的新闻应用中,我有一个相当典型的设置,ListView然后是DetailView,您可以将CMS切换到编辑模式&编辑新闻项PlaceholderField

中的插件

您还可以extend the toolbar提供在模态对话框中添加新新闻的链接,或列出现有新闻项目;

@toolbar_pool.register
class LatestNewsToolbar(CMSToolbar):

    def populate(self):

        news_menu = self.toolbar.get_or_create_menu(
            NEWS_MENU_IDENTIFIER, NEWS_MENU_NAME
        )
        position = news_menu.get_alphabetical_insert_position(
            _('Latest news'),
            SubMenu
        )

        menu = news_menu.get_or_create_menu(
            'latest_news_menu',
            _('Latest News ...'),
            position=position
        )
        try:
            menu.add_modal_item(
                _('Add News Item'),
                url=admin_reverse('news_latestnews_add')
            )
        except NoReverseMatch:
            # not in urls
            pass
        try:
            menu.add_modal_item(
                _('Existing News Items'),
                url=admin_reverse('news_latestnews_changelist')
            )
        except NoReverseMatch:
            # not in urls
            pass

    def post_template_populate(self):
        pass

    def request_hook(self):
        pass

如果你有这种工作方式的游戏,我想你会发现它更合适&比插件更强大:)

在CMS的这个区域查看此视频; https://www.youtube.com/watch?time_continue=2670&v=Dj8dhgmzlFM

答案 1 :(得分:0)

使用插件将从您的应用程序发送新闻文章到其他django CMS内容中 - 不要使用插件来创建新闻内容。

请参阅how to use placeholders in other applications上的django CMS文档。