python测试开发django-56.模板渲染markdown语法+代码高亮

前言

上一篇已经实现在xadmin后台编辑markdown语法的文档,编辑完成之后发布博客,在前端html能把markdown语法显示出来。
主要思路是先从数据库把markdown的代码读出来,导入markdown模块,把markdown的语法转换成html语法,再嵌入到模板里面。

markdown

先使用pip按照markdown模块,用于转换markdown为html

pip install markdown

在后台页面编辑的markdown内容,markdown里面插入代码一般有两种方式:一种是把代码全部选中,然后缩进(四个空格)
第二种是代码部分用三个```包起来,后面可以跟着对应语言python,如下(这里不太好展示,前面的\要去掉)

# django 框架介绍 Django 项目是一个Python定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来。Django 框架的核心组件有:- 用于创建模型的对象关系映射 - 为最终用户设计的完美管理界面 - 一流的 URL 设计 - 设计者友好的模板语言 - 缓存系统。# 图片展示 图片显示 ![](/media/editor/1_20190422134140555628.png) # 代码展示 \```python # 前面的\去掉 from django.db import models from mdeditor.fields import MDTextField # 必须导入 class Blog(models.Model): '''博客管理''' title = models.CharField(max_length=30) content = MDTextField() # 注意为MDTextField() def __str__(self): return self.__doc__ + "title->" + self.title class Meta: verbose_name = "博客发布" verbose_name_plural = verbose_name \``` # 前面的\去掉

views试图

在views.py中导入markdown,这里extensions里面三个参数用法,

  • markdown.extensions.extra 本身包含很多扩展
  • markdown.extensions.codehilite 是语法高亮,后面插入代码会用到
  • markdown.extensions.toc 是自动生成目录

from .models import Blog import markdown def detail(request, id): '''博客详情展示, 根据id读取''' blog = Blog.objects.filter(id=int(id)).first() blog.content = markdown.markdown(blog.content, extensions=[ 'markdown.extensions.extra', 'markdown.extensions.codehilite', 'markdown.extensions.toc', ], safe_mode=True, enable_attributes=False) context = { "blogmd": blog } return render(request, 'blogmd.html', context)

templates模板

接下来把markdown的内容插入到以下模板的{{ blogmd.content | safe}} 位置,这里需加个safe参数,
Django 出于安全方面的考虑,任何的 HTML 代码在 Django 的模板中都会被转义(即显示原始的 HTML 代码,而不是经浏览器渲染后的格式)。
为了解除转义,只需在模板标签使用 safe 过滤器即可,告诉 Django,这段文本是安全的,你什么也不用做

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel="stylesheet" href="../static/hello/css/code.css" type="text/css"> <title>{{blogmd.title}}</title> </head> <body> <div style="margin: 5% 20%;"> <h1>{{blogmd.title}}</h1> <br> <div class="author"> <span class="publish-time">2019.04.22 18:28 发布</span> <span class="wordage">      作者:上海-悠悠</span> <span class="views-count">    阅读 9999</span> </div> <hr> {{ blogmd.content | safe}} </div> </body>

文件名保存为blogmd.html

urls.py设置

urls.py设置访问地址

from django.conf.urls import url from hello import views urlpatterns = [ url(r'^blog/(.+).html$', views.detail), ]

访问地址:http://localhost:8000/blog/2.html页面效果如下

代码高亮展示

这里代码部分,默认是不会有背景的,也不会也高亮,如下图

代码高亮展示需要安装Pygments模块

pip install Pygments

接着在你的app的static目录新建一个css目录:hello/static/hello/css

打开cmd, cd到hello/static/hello/css目录,执行以下指令,会在当前目录生成一个code.css文件

pygmentize -S default -f html -a .codehilite > code.css

在模板里面引入这个css文件就可以了,在head里面加一个link

<link rel="stylesheet" href="../static/hello/css/code.css" type="text/css">

刷新页面后,就能显示高亮的代码了

2019年《python3自动化UI+接口》课程5月25-7月27开课
主讲老师:上海-悠悠
上课方式:QQ群视频在线教学
上课时间:每周六、周日晚上20:30-22:30
报名费:2000

(0)

相关推荐

  • Markdown基础语法

    文字 删除线 这就是 ~~删除线~~ (使用波浪号) 这就是 删除线 (使用波浪号) 快捷键(Alt Shift 5) 斜体 这是用来 *斜体* 的 _文本_ 这是用来斜体 的 文本 快捷键(Ctrl ...

  • 半个小时学会Markdown标记语法

    Python数据挖掘与文本分析&Stata应用能力提升与实证前沿云特训 学习编程的过程需要敲大量代码,遇到很多错误,好脑子不如烂笔头,能一边敲代码一边做笔记,学起来事倍功半,今天分享大家一个做 ...

  • python测试开发django-2.templates模板与html页

    前言 Django 中的视图的概念是一类具有相同功能和模板的网页的集合.通俗一点来说,就是你平常打开浏览器,看到浏览器窗口展示出来的页面内容,那就是视图. 前面一章通过浏览器访问http://127. ...

  • python测试开发django-67.templates模板变量取值

    前言 django 的模板里面变量取值是通过句点语法来取值,就是一个点(.)符号.取值的对象也可以是字符串,int类型,list列表,字典键值对,也可以是一个类的实例对象. views视图 比如我在 ...

  • python测试开发django-69.templates模板过滤器filter

    前言 templates 模板里面过滤器 filter 的作用是对变量的出来,比如小写转大写,替换一些特殊字符,对列表取值,排序等操作. 内置的过滤器有很多,本篇拿几个常用的过滤器做案例讲解下相关的功 ...

  • python测试开发django -140.Bootstrap 缩略图

    前言 网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 class .thumbnail 的& ...

  • python测试开发django -143.Bootstrap 表单控件校验状态

    前言 Bootstrap 对表单控件的校验状态,如 error.warning 和 success 状态,都定义了样式.使用时,添加 .has-warning..has-error 或 .has-su ...

  • python测试开发django -142.Bootstrap 表单(form)

    前言 HTML 表单用于收集不同类型的用户输入.boostrap中表单有几种样式 基本垂直表单 内联表单 form-inline 水平排列表单 form-horizontal 基本表单实例 单独的表单 ...

  • python测试开发django -141.Bootstrap 面板(Panels)

    # 前言 面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 元素添加 class .panel 和 class .panel-default 即可 基础面板 不带标题的基本面 ...

  • python测试开发django -144.Ace Editor 在线编辑python代码

    前言 网页上想在线编辑代码,可以使用Ace Editor 在线编辑实现.比如我们想实现一个功能,在网页版上写python代码,能有python的语法自动补齐功能. Ace Editor 在线编辑 AC ...

  • python测试开发django-5.模板templates

    前言 html是一个静态的语言,里面没法传一些动态参数,也就是一个写死的html页面.如果想实现在一个固定的html样式,传入不同的参数,这就可以用django的模板传参来解决. <玩转Djan ...