0

谁能描述我如何在 django.contrib.flatpages 中实现 ckeditor?

4

3 回答 3

1

找到了很好的解决方案:

这有点棘手。我的 urls.py 中有 admin.autodiscover(),所以它会自动为 django.contrib.flatpages 中定义的 flatpages 创建一个管理员。我当然不想破解 Django 附带的东西,也不想放弃自动发现的便利。

http://www.elidickinson.com/story/django-flatpages-and-ckeditor/2011-11

于 2012-05-05T03:11:10.707 回答
1

只需几个步骤即可完成此操作。首先,确保 ckeditor.js 以某种方式从 django 提供。这方面的信息可以在http://docs.djangoproject.com/en/1.2/howto/static-files/#howto-static-files找到。对于此示例,我将从 127.0.0.1:8000/js/ckeditor/ckeditor.js 提供它。

您需要覆盖标准的平面更改表单模板。在您的模板目录中,在以下子目录中创建一个文件:<您的模板目录>/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 的 extrahead 块的默认文本。脚本的其余部分导入 ckeditor javascript,并使用 django 已经导入的 jQuery 和 ckeditor jQuery 适配器。最后,我们最终在页面上强制了一些样式,因为默认情况下,事情看起来有点乱。

从这里,您可以通过在 ckeditor 调用中实现不同的选项来快速更改工具栏。如果非技术人员要编辑这些平面页面,您可能需要转到一个简单的工具栏。您可以在上面的代码中取消注释该行来实现它。

于 2010-06-18T21:07:24.157 回答
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 将检查所有类属性设置为“ckeditor”的文本区域。

于 2013-07-06T01:03:19.637 回答