我有一个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()
有什么想法吗?
答案 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文档。