我有一个带有“新闻”应用程序的 Django 项目。 这是模型:
class News(models.Model):
title = CharField(max_length=255)
content = TextField()
如何将django-cms添加到这个项目中,以便能够直接在模板中修改新闻?我知道我需要一个基于“新闻”模型的自定义插件,在这里我有两个选择: 1) 我可以在单个插件中描述“新闻”模型的所有字段,但是会有一个窗口可以一次编辑所有字段。
插件,描述所有字段:
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()
有什么想法吗?
请您参考如下方法:
您可能想要考虑的是插件的替代品,我发现它非常适合新闻应用程序。
您可以将新闻内容字段更改为 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
