Django开发博客4——支持markdown

配置markdown支持文章编写

涉及知识点:

  • markdown语法第三方库:mistune
  • Form层支持重写字段样式,组件和数据清洗
  • 取消django的自动转义:过滤器safe和{% autoescape off %}{% endautoescape %}
  • 支持语法高亮的前端库:highlight.js

1.评论内容支持
因为评论内容不会发生修改的情况,所以直接将评论转化为markdown格式存入数据库

  1. forms.py form层保存数据前进行清洗,使评论转为markdown之后存入数据库
import mistune
from comment.models import Comment
from django import forms

# 如果不考虑样式,仅需定义model和fields即可
class CommentForm(forms.ModelForm):

    content = forms.CharField(
        label='内容',
        max_length=500,
        widget=forms.widgets.Textarea(
            attrs={'rows': 6, 'cols': 60, 'class': 'form-control'}
        )
    )

    # 定义需要进行数据清洗的字段和规则
    def clean_content(self):
        content = self.cleaned_data.get('content')  # 获取字段内容
        if len(content) < 10:
            raise forms.ValidationError('评论不可少于10个字')
        # 返回markdown格式的评论内容
        content = mistune.markdown(content)
        return content

    class Meta:
        model = Comment
        fields = ['content',]

2.出于安全考虑,django会对模板中的html标签和js语法等进行自动转义,前端显示的将是html源码,此处进行关闭

{% autoescape off %}
{{ comment.content }} :
{% endautoescape %}

2.文章正文
因正文部分存在修改的状况,我们在model层中新加一个字段content_html用来自动保存处理后的markdown文本(不然再次编辑时拿到的是html源码,无法编辑)
1.Post模型中新增字段,并重写save方法

class Post(models.Model):
	# 省略其余代码
	content_html = models.TextField(verbose_name='正文html代码', blank=True, editable=False)
	# 省略其余代码
	
    # 重写save方法,保存对象时自动赋值content_html
    def save(self, *args, **kwargs):
        self.content_html = mistune.markdown(self.content)
        super().save(*args, **kwargs)

2.模板中关闭django的自动转码功能
3.设置代码高亮:highlight.js
  1.在base.html中新增一个block块,用于引入资源
  2.detail.html中新增代码

<!-- 导入markdown代码高亮所依赖的库 -->
{% block extra_head %}
    <link rel="stylesheet" href="https://cdn.bootcss.com/highlight.js/9.15.8/styles/googlecode.min.css">
    <script src="https://cdn.bootcss.com/highlight.js/9.15.7/highlight.min.js"></script>
    <script>hljs.initHighlightingOnLoad();</script>
{% endblock %}

参考:《django企业开发实战》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值