django.contrib.flatpages で ckeditor を実装する方法を説明できる人はいますか?
3 に答える
良い解決策が見つかりました:
これは少し注意が必要です。urls.pyにadmin.autodiscover()があるので、django.contrib.flatpagesで定義されているようにフラットページの管理者が自動的に作成されます。私は確かに、Djangoに付属しているものをハッキングしたくないし、自動検出の便利さをあきらめたくない。
http://www.elidickinson.com/story/django-flatpages-and-ckeditor/2011-11
これを行うためのいくつかの手順。まず、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 から提供します。
標準の flatpage 変更フォーム テンプレートをオーバーライドする必要があります。テンプレート ディレクトリで、次のサブディレクトリにファイルを作成します: <your templates dir>/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 javascript をインポートし、django のインポート済みの jQuery を ckeditor jQuery アダプターと共に使用します。最後に、ページに何らかのスタイルを強制することになります。これは、デフォルトでは少し乱雑に見えるためです。
ここから、ckeditor 呼び出しにさまざまなオプションを実装することで、ツールバーをすばやく変更できます。技術者ではない人がこれらのフラットページを編集する場合は、単純なツールバーに移動することが必要になる可能性があります。上記のコードでその行のコメントを外すだけで、それを実装できます。
テンプレートのハッキングを使用しないソリューションについては、このページを確認してください: 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」に設定されたすべてのテキストエリアをチェックします。