Tuesday, August 26, 2008

Django|Tinymce rich text editor in Django


http://tinymce.moxiecode.com/dump.php?example=true

前几天搭好的0.0.1版是纯文本化的,除非自己手动<b></b>才能显示粗体。因此得安装一个富文框是必须的。

我打算用TinyMCE,它是一个非常流行的富文本编辑器,100% JavaScript,WordPress也是用它的,所以理所当然就选择TinyMCE了。

参考了Django网站上的AddWYSIWYGEditor - Django Code - Trac,搞了很久都不成功,也失败。

只好在论坛请教,得到了详细的帮助。终于搞成功了。记录一下!

―-

帖子在这里: How to enable the rich editor in Django?

Michael很热心,给我回复了这么多。真是非常感谢他!

首先,根据Michael的意见,尽量使所有自己加入的media都不与系统默认的admin media相关联,即自己设定一个新目录来放media,不要放在系统目录里,方便布署。

所以,我把tiny_mce安装在工程目录下的mymedia/js这个文件夹下,并新建一个文件textareas.js,作为tiny_mce的配置文件:

tinyMCE.init({
mode : "textareas",
theme : "advanced"
});

然后,在工程根目录的urlpatterns中,加一个url即可:

(r'^media/(?P<path>.*)$', 'django.views.static.serve',
{'document_root': './mymedia'}),

最后,在所有你想将TextField用Tiny_MCE来编辑的Models里,加入:

class Admin:
js = (
'/media/js/tiny_mce/tiny_mce.js',
'/media/js/textareas.js',
)

这里需要注意,虽然上面urlpattern中我指定了"文档根目录"是./mymedia,但是在Models中设定路径,依旧是/media/,而非mymedia。似乎这个/media/只是一个变量,就是因为这个我搞了很久。

弄好以后,管理后台不会因为新设定的mymedia而受影响,新的mymedia只是一个附加品吧。看截图:

关于Django的其他补充:

  • Django的API还真太会break了,网上很多人说建议使用最新的svn版也就是这个原因了。0.96版定义CharFiled的长度是用maxlength,到了0.97(还未发布)就是用max_length了。
  • Google Code上有很多用Django搞的开源项目,当然也包括很多Blog系统,这样我就有很多可以参考和学习的例子了。其中有个国人写的fallever非常不错,他本人的主页http://www.fallever.com也是用fallever搭的,学习的对象。
  • 国内也有Python的主机可以买,似乎不是很贵。其中jeff(fallever的作者)就是买这个"浪点主机",以后我也可以考虑一下,还能支持SSH,国内的应该很快。

No comments: