django-cms中的默认内容插件

时间:2010-04-13 10:23:18

标签: django content-management-system django-cms

我开始使用django CMS项目。它非常棒,采用模块化设计而牢记......但实际上我们的客户想要的是更简单:

在这里,在django CMS中,每个页面都可以包含许多内容“插件” - 无论是文本,图像还是其他。但是客户想要为每个新页面自动激活,选择和创建文本插件 - 并在该文本字段上工作。这对他们来说更简单。

之前有人用这个CMS系统做过类似的事吗?或者,您可以推荐任何其他简单的django CMS解决方案?

5 个答案:

答案 0 :(得分:2)

有一种简单的方法可以实现相同的功能:

提供许多“原型页面”,每个页面模板和您想要提供给客户的实例化插件的组合。

让客户通过复制模板页面创建新页面(可以通过页面管理员中的复制图标完成),而不是从头开始创建新页面。通过这种方式,所需的插件已经存在,即使您有希望也可以使用默认内容。

答案 1 :(得分:2)

答案 2 :(得分:1)

你甚至需要CMS模块吗?

最基本的CMS使用开箱即用的django几乎是微不足道的:

class ContentPage(models.Model):
   title = models.CharField(max_length=100)
   content = models.TextField()
   slug = models.SlugField()

def view_page(request, slug='home'):
   return render_to_response('content.html',
        { 'page':  ContentPage.objects.get(slug=slug) },
        context_instance=RequestContext(request)
    )

只需使用django管理员即可开始使用。但是如果你想要更多,而不是给他们管理员,那么可以很容易地敲一下表格/动作来编辑这些字段。

如果您需要wysiwyg编辑,请在表单模板中添加tinymce。类似的东西:

 <script type="text/javascript" src="{{MEDIA_URL}}tiny_mce/tiny_mce.js"></script>
 <script type="text/javascript">
 tinyMCE.init({...

或(正如'sayplastic'所述)如果您仍在通过管理员编辑页面,您也可以附加Tiny

class Media:
    js = (
        settings.MEDIA_URL + "jquery/jquery.js",
        settings.MEDIA_URL + "tiny_mce/tiny_mce.js",
        settings.MEDIA_URL + "js/admin.js"
    )

答案 3 :(得分:1)

它们也是FeinCMS,它默认提供类似的页面树编辑器和更简单的块。它更具可定制性。

如果您不需要树编辑器,Django内置flatpages非常简单。

答案 4 :(得分:0)

最快,但可能不是最优雅的方式是:

  • 编写一个脚本,在从下拉列表中选择和添加文本插件时模仿用户行为;
  • 覆盖PageAdmin以包含我们的脚本。

它是这样的:

# anywhere in your project, for example, site/admin.py
from cms.models import Page
from cms.admin.pageadmin import PageAdmin

class ModPageAdmin(PageAdmin):
    class Media:
        js = ('js/cms.page.js',)

admin.site.unregister(Page)
admin.site.register(Page, ModPageAdmin)

# in MEDIA_URL/js/cms.page.js
$(document).ready(function(){
    ph = $("div.form-row.main") // replace "main" with your placeholder name, lower-case
    $("select", ph).val('TextPlugin')
    window.setTimeout(function(){ $("span.add-plugin", ph).click() }, 500)
})