用于HTML解析器的Django字段模型?

时间:2019-07-06 07:04:05

标签: python django

models.py的内容如下:

from django.db import models

# Create your models here.
class Post(models.Model):
        title = models.CharField(max_length=256)
        pub_date = models.DateTimeField()
        image = models.ImageField(upload_to='media/')
        body = models.TextField()

        def __str__(self):
            return self.title

        def pub_date_pretty(self):
            return self.pub_date.strftime('%A %d %B %Y @ %-I:%M:%S %p')

        def summary(self):
            return self.body[:350]

第5行到第8行为我的博客仪表板初始化模型类变量。我的信息中心looks like this。有标题,发布日期,图片和正文。 Udemy老师建议咨询the official Django doc for field types/options。我不确定我是否真的了解其中的大部分内容。那里有太多信息。我对所有人的问题是:哪个字段选项或字段类型为正文启动HTML解析器?我的意思是,当我开始创建新博客文章时,如何使用HTML格式按钮(如粗体,下划线和斜体)创建富文本?不是我真正关心的按钮。我只想解析我的HTML标记。注意HTML标签I’ve circled in red here。如何获取h5,hr和em进行解析?是否有字段选项/类型?我在“模型”字段文档中看不到它。

1 个答案:

答案 0 :(得分:0)

您必须将外部库用于RTF编辑器。 有许多可用的富文本编辑器。 让我们以DJANGO-CKEDITOR为例

安装

  1. 将django-ckeditor安装或添加到您的python路径。
pip install django-ckeditor
  1. 将ckeditor添加到您的INSTALLED_APPS设置。

  2. 运行collectstatic管理命令:$ ./manage.py collectstatic。这会将静态CKEditor所需的媒体资源复制到STATIC_ROOT设置所指定的目录中。

  3. 将此添加到您的settings.py

CKEDITOR_BASEPATH = "/my_static/ckeditor/ckeditor/"

CKEDITOR_UPLOAD_PATH = "uploads/"
  1. 将CKEditor URL包含添加到项目的urls.py文件中:
  

url(r'^ckeditor/', include('ckeditor_uploader.urls')),

  1. 在您的models.py中,将字段正文从TextField()更改为RichTextField()
from django.db import models
from ckeditor.fields import RichTextField

# Create your models here.
class Post(models.Model):
        title = models.CharField(max_length=256)
        pub_date = models.DateTimeField()
        image = models.ImageField(upload_to='media/')
        body = models.RichTextField()
  1. 运行python.manage.py makemigrationspython.manage.py migrate

  2. 最后在您的admin.py文件中

from django import forms
from django.contrib import admin
from ckeditor.widgets import CKEditorWidget

from .models import Post

class PostAdminForm(forms.ModelForm):
    content = forms.CharField(widget=CKEditorWidget())
    class Meta:
        model = Post
        fields = '__all__'

class PostAdmin(admin.ModelAdmin):
    form = PostAdminForm

admin.site.register(Post, PostAdmin)