天天看点

Django搭建个人博客--引入Markdown语法

Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的或者HTML文档。

一、安装Markdown

进入虚拟环境,输入如下指令:

pip install      

二、使用Markdown

为了将Markdown语法书写的文字渲染为HTML文本,须做如下更改:

2.1、修改article/views.py的article_detail()

...
# 文章详情
def article_detail(request,id):
    # 取出相应的文章
    article = ArticlePost.objects.get(id=id)

    # 将markdown语法渲染成html样式
    article.body = markdown.markdown(article.body,
        extensions=[
            #包含 缩放、表格等常用扩展
            'markdown.extensions.extra',
            #语法高亮扩展
            'markdown.extensions.codehilite',
        ])
    # 需要传递给模板的对象
    context = { 'article' : article }
    # 载入模板,并返回context对象
    return render(request, 'article/detail.html', context)      
  • ​markdown.markdown​

    ​​语法接收两个参数:第一个参数是需要渲染的文章正文​

    ​article.body​

    ​;第二个参数载入了常用的语法扩展;
  • ​markdown.extensions.extra​

    ​中包括了缩写、表格等扩展;
  • ​markdown.extensions.codehilite​

    ​这是后面要使用的代码高亮扩展;

2.2、修改templates/article/detail.html

<!-- extends表明此页面继承自base.html文件 -->
{% extends "base.html" %}
{% load staticfiles %}

<!-- 写入base.html中定义的title -->
{% block title %}
  文章详情
{% endblock title %}

<!-- 写入base.html中定义的content -->
{% block content %}

<!-- 文章详情 -->
<div class="container">
  <div class="row">
    <!-- 标题及作者 -->
    <h1 class="col-l2 mt-4 mb-4">{{ article.title }}</h1>
    <div class="col-l2 alert alert-success">作者:{{ article.author }}</div>
    <!-- 文章正文 -->
    <div class="col-l2">
    
      # 在 article.body后加上 |safe 过滤器
      <p>{{ article.body|safe }}</p>
    </div>
  </div>
</div>      
  • Django出于安全的考虑,会将输出的HTML代码进行转义,这使得​

    ​article.body​

    ​​中渲染的HTML文本无法正常显示。管道符​

    ​|​

    ​​是Django中过滤器的写法,而​

    ​|safe​

    ​​就类似给​

    ​article.body​

    ​贴了一个标签,表示这一段字符就不需要转义了。

2.3、代码高亮

在​

​static​

​​目录中新建一个目录​

​md_css/​

​,一会放置代码高亮的样式文件。

重新打开一个命令行窗口,进入虚拟环境,安装​

​Pygments​

​:

pip install      

​Pygments​

​是一种通用语法高亮显示器,可以帮助我们自动生成美化代码块的样式文件。

在命令行中进入刚刚新建的​

​md_css​

​目录中,输入​

​Pygments​

​指令:

pygmentize -S monokai -f html -a .codehilite > monokai.css      

回车后检查一下,在​

​md_css​

​​目录中是否自动生成了一个叫​

​monokai.css​

​的文件,这是一个深色背景的高亮样式文件。

除了Monokai这个深色的样式外,Pygments还内置了很多其他的样式,可以自行选择:​​pygments-css​​

2.4、引用monokai.css

在​

​base.html​

​中引用这个文件:

<!-- 载入静态文件 -->
{% load staticfiles %}

<!DOCTYPE html>
<!-- 网站主语言 -->
<html lang="zh-cn">

    <head>
        <!-- 网站采用的字符编码 -->
        <meta charset="utf-8">
        <!-- 预留网站标题的位置 -->
        <title>{% block title %}{% endblock %}</title>
        <!-- 引入bootstrap的css文件 -->
        <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}">

        <!-- 引入monokai.css -->
        <link rel="stylesheet" href="{% static 'md_css/monokai.css' %}">
    </head>

    <body>
        ...
    </body>
    

</html>      

三、查看效果

# 国风·周南·关雎
---
**关关雎鸠,在河之洲。窈窕淑女,君子好逑。**

参差荇菜,左右流之。窈窕淑女,寤寐求之。

---
+ 列表一
+ 列表二
    + 列表二-1
    + 列表二-2
---

```python
def article_detail(request, id):
    article = ArticlePost.objects.get(id=id)
    # 将markdown语法渲染成html样式
    article.body = markdown.markdown(article.body,
        extensions=[
        # 包含 缩写、表格等常用扩展
        'markdown.extensions.extra',
        # 语法高亮扩展
        'markdown.extensions.codehilite',
        ])
    context = { 'article': article }
    return render(request, 'article/detail.html', context)