有人能说明我是如何在django.contrib.flatpages中实现ckeditor的吗?
答案 0 :(得分:1)
完成此任务的几个步骤。首先,确保从django以某种方式提供ckeditor.js。有关此信息,请访问http://docs.djangoproject.com/en/1.2/howto/static-files/#howto-static-files。对于这个例子,我将从127.0.0.1:8000/js/ckeditor/ckeditor.js提供它。
您需要覆盖标准的平面更改表单模板。在您的模板目录中,在以下子目录中创建一个文件:< your templates目录> /admin/flatpages/flatpage/change_form.html
在里面创建以下文字:
{% extends "admin/change_form.html" %}
{% block extrahead %}
{{ block.super }}
<script type="text/javascript" src="/js/ckeditor/ckeditor.js"></script>
<script type="text/javascript" charset="utf-8">
var $ = jQuery = django.jQuery.noConflict(); // Use djangos jquery as our jQuery
</script>
<script type="text/javascript" src="/js/ckeditor/adapters/jquery.js"></script>
<script type="text/javascript" charset="utf-8">
$(document).ready( function(){
$( 'textarea' ).ckeditor({
"skin":"kama",
"width" : 850,
// "toolbar" : "Basic", // uncomment this line to use a basic toolbar
});
});
</script>
{# Adding some custom style to perty thing up a bit. #}
<style type="text/css">
div>.cke_skin_kama{
width: 100%;
padding: 0!important;
clear: both;
}
</style>
{% endblock %}
前几行包含额外块的django默认文本。脚本的其余部分导入ckeditor javascripts并使用django已经导入的jQuery和ckeditor jQuery适配器。最后,我们最终在页面上强制使用某种样式,因为默认情况下,事情看起来有些混乱。
从这里,您可以通过在ckeditor调用中实现不同的选项来快速更改工具栏。如果非技术人员要编辑这些平面页,那么您可能需要使用简单的工具栏。您可以在上面的代码中取消注释该行以实现它。
答案 1 :(得分:1)
找到了很好的解决方案:
这有点棘手。我在urls.py中有admin.autodiscover(), 所以它会自动为flatpages创建一个admin 在django.contrib.flatpages中定义。我当然不想去 劈开Django附带的东西,我也不想给 提高自动发现的便利性。
http://www.elidickinson.com/story/django-flatpages-and-ckeditor/2011-11
答案 2 :(得分:0)
对于没有模板黑客攻击的解决方案,请检查此页面: http://johansdevblog.blogspot.it/2009/10/adding-ckeditor-to-django-admin.html
如果链接断开,我在这里报告示例。 这是一个简单的模型。
from django.db import models
class SampleModel(models.Model):
title = models.CharField(max_length=50)
text = models.TextField()
def __unicode__(self):
return self.title
这是如何将ckeditor支持添加到特定类型的字段,在本例中为TextArea。
from sampleapp.models import SampleModel
from django.contrib import admin
from django import forms
from django.db import models
class SampleModelAdmin(admin.ModelAdmin):
formfield_overrides = { models.TextField: {'widget': forms.Textarea(attrs={'class':'ckeditor'})}, }
class Media:
js = ('ckeditor/ckeditor.js',) # The , at the end of this list IS important.
admin.site.register(SampleModel,SampleModelAdmin)
此时ckeditor.js将检查class属性设置为“ckeditor”的所有textarea。