Python Web开发:基于富文本的“新闻”模型

来自CloudWiki
跳转至: 导航搜索

基于富文本的“新闻”模型

富文本编辑器介绍

富文本编辑器(Rich Text Editor)是一种内嵌于浏览器、所见即所得的文本编辑器

通过富文本的导入,可以让用户在后台管理系统中像使用Word一样编辑文章

UEditor是由百度Web前端研发部开发的所见即所得的文本编辑器

富文本DjangoUeditor安装

如果使用Python3 ,需要手动下载安装包。

下载地址:https://github.com/twz915/DjangoUeditor3/

解压之后通过cd命令定位到DjangoUeditor3-master根文件夹下面(与setup.py同级目录)

输入以下命令完成安装:

python setup.py install 

安装完成之后为了能够在自己的Django项目中集成UEditor编辑器,需要将DjangoUeditor文件夹复制到当前项目中,

从本质上说,DjangoUeditor即为一个Django应用。

编辑settings.py

# Application definition

INSTALLED_APPS = [
    ...
    'DjangoUeditor',#添加富文本应用
]

路由配置,打开配置文件夹hengdaproject下的urls.py

添加:

 path('ueditor/',include('DjangoUeditor.urls')),

创建富文本“新闻”模型

新闻模型

标题,详细内容(用富文本),新闻类型,发布时间等

创建模型

newsApp/models.py:

from django.db import models
from DjangoUeditor.models import UEditorField
import django.utils.timezone as timezone

# Create your models here.


class MyNew(models.Model):
    NEWS_CHOICES = (
        ('企业要闻', '企业要闻'),
        ('行业新闻', '行业新闻'),
        ('通知公告', '通知公告'),
    )
    title = models.CharField(max_length=50, verbose_name=' 新闻标题')
    description = UEditorField(u'内容',
                               default='',
                               width=1000,
                               height=300,
                               imagePath='news/images/',
                               filePath='news/files/')
    newType = models.CharField(choices=NEWS_CHOICES,
                               max_length=50,
                               verbose_name='新闻类型')
    publishDate = models.DateTimeField(max_length=20,
                                       default=timezone.now,
                                       verbose_name='发布时间')
    views = models.PositiveIntegerField('浏览量', default=0)

    def __str__(self):
        return self.title

    class Meta:
        ordering = ['-publishDate']
        verbose_name = "新闻"
        verbose_name_plural = verbose_name

  • u'内容' :定义该字段在后台管理系统中的别名
  • _str_ : 来设置后台管理系统中新闻列表每条新闻的显示名称。

模型迁移

python manage.py makemigrations

python manage.py migrate

后台管理系统使用富文本

下面对模型进行注册

newsApp/admin.py:

from django.contrib import admin

from .models import MyNew

# Register your models here.


class MyNewAdmin(admin.ModelAdmin):
    style_fields = {'description': 'ueditor'}


admin.site.register(MyNew, MyNewAdmin)

上述代码中,通过定义style_fields属性来绑定富文本字段。

打开后台管理系统,在newsApp模块中添加一条记录,会出现错误。

  TypeError:render() got an unexpected keyword argument 'renderer'

上述错误出现的原因是django2 和UEditor兼容性导致的,解决方法是定位到出现错误的位置处。C:\Users\maxin\AppData\Local\Programs\Python\Python37\Lib\site-packages\django\forms\boundfield.py ,然后按照下述方式注释掉最后的render参数:

 
        return widget.render(
            name=self.html_initial_name if only_initial else self.html_name,
            value=self.value(),
            attrs=attrs,
            #renderer=self.form.renderer, #注释掉这一行
        )

保存后重新运行,进入后台管理系统,即为“新闻添加”页面效果图:

Python21051801.png