Django markdown 实现

一、安装markdown插件

pip install django-mdeditor
pip install markdown

二、在 settings 配置文件 INSTALLED_APPS 中添加 mdeditor:

    INSTALLED_APPS = [
        ...
        'mdeditor',
    ]

三、插入图片没有地址,针对django3.0+修改 frame 配置,settings.py设置如下:

X_FRAME_OPTIONS = 'SAMEORIGIN' # 上传图片时,防止跨域 # django 3.0 + 默认为 deny

四、在 settings 中添加媒体文件的路径配置:

MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/media/'

在你项目根目录下创建 uploads/editor 目录,用于存放上传的图片。

五、在你项目的根 urls.py 中添加扩展url和媒体文件url:

我的django版本是4.2.5,设置如下

from django.conf import settings
from django.urls import include
from django.conf.urls.static import static

...

urlpatterns = [
    ...
    path("mdeditor/", include('mdeditor.urls')),
]

# 配置静态文件,这个很重要,不然上传的图片和文件无法被访问到,必须要引入blog/settings里面的debug,因为globle的debug是False

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

六、编写一个测试demo—model:

from django.db import models
from mdeditor.fields import MDTextField

class Content(models.Model):
    """文章"""
    title = models.CharField(max_length=100)
    content = MDTextField()
    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)
    class Meta:
        db_table = '文章'
        verbose_name = '文章'
        verbose_name_plural = '文章'
        ordering = ['-create_time']
    
    def __str__(self):
        return self.title

七、向admin中注册model

from django.contrib import admin
from markdownx.admin import MarkdownxModelAdmin
from .models import Content

class ContentAdmin(MarkdownxModelAdmin):
    # 显示哪些字段
    list_display = ('id', 'title', 'create_time', 'update_time')
    # 排序字段
    ordering = ("-create_time",)
    # 显示哪些字段可以点击跳转
    list_display_links = ("id", "title")
    # 搜索字段
    search_fields = ("title", "content")
    # 设置每页显示多少条数据
    list_per_page = 15

admin.site.register(Content, ContentAdmin)

八、创建好Django admin 超级管理员账号python manage.py createsuperuser

然后运行 python manage.py makemigrations 和 python manage.py migrate 来创建你的model 数据库表.
登录 django admin后台,点击 '添加'操作,你会看到如下界面。

九、在前端中使用Markdown 编辑器,首先创建ModelForm类

from app.models import Content
from django.forms import ModelForm
from django import forms

class MDEditorModleForm(forms.ModelForm):
    class Meta:
        model = Content
        fields = '__all__'

def add(request):
    forms = MDEditorModleForm()
    if request.method == 'POST':
        forms = MDEditorModleForm(request.POST)
        if forms.is_valid():
            forms.save()
            return redirect('/index')
        else:
            print(forms.errors)
    
    return render(request, 'add.html', {'forms': forms})
前端代码:
{% load static %}
<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>添加文章</title>
</head>
<body>

    <h3>添加文章</h3>
    <form method="post">
        {% csrf_token %}
        {{ forms.media }}
        {{ forms.as_p }}
        <p><input type="submit" value="立即保存"></p>
    </form>
</body>
</html>

运行效果:

十、django-mdeditor官方文档

posted @ 2024-05-18 14:50  沈柏军  阅读(406)  评论(0)    收藏  举报