自定义Django管理后台表单以输入BBCode
我正在写一个django网站,想用内置的管理界面让管理员编辑一些内容。为了让他们不需要学习任何html,我希望他们能用简单的bbcode标签来格式化内容。
我写了两个函数,一个是把bbcode转换成html,另一个是把html转换成bbcode。我们可以叫它们html2bbcode和bbcode2html。
基本上,我需要做到以下几点:
- 把从数据库里取出的html内容通过html2bbcode处理,这样在管理员编辑的表单中就能显示bbcode。
- 当管理员点击“保存”时,把表单里的bbcode通过bbcode2html处理,然后再存入数据库。
- 在网页需要显示内容的时候,能够把内容以html的形式取出来。
我找不到任何地方说明如何在保存结果到数据库之前,通过自定义函数处理管理员界面的输入(或者反过来)。有没有人能给我指个方向?
1 个回答
1
你可以在你的模型里设置两个不同的字段,一个用来存储HTML,另一个用来存储BBCode。把HTML那个字段在管理员界面隐藏起来(可以通过ModelAdmin类的exclude属性来实现),这样管理员只会看到和编辑BBCode字段。你可以通过重写模型的保存方法来获取HTML内容,把你的bbcode转为html的函数放在这里。大概是这样的:
def save(self, *args, **kwargs):
self.html = bbcode2html(self.bbcode)
super(MyModel, self).save(*args, **kwargs)
关于如何自定义管理员界面的文档: https://docs.djangoproject.com/en/dev/ref/contrib/admin/