让我们在文本区域添加 Markdown 支持来改善用户体验。
你会看到要实现这个功能非常简单。
首先,我们安装一个名为 Python-Markdown 的库:
pip install markdown
#我们可以在 Post 视图的 model 中添加一个新的⽅法:
#boards/models.py
from django.db import models
from django.utils.html import mark_safe
from markdown import markdown
class Post(models.Model):
# ...
def get_message_as_markdown(self):
return mark_safe(markdown(self.message, safe_mode='escape'))
#这里我们正在处理用户的输入,所以我们需要小心点。
#当使用 Mardown功能时,我们需要先让它转义一下特殊字符,然后再解析出 Markdown 标签。
#这样做之后,输出字符串可以安全的在模板中使用。
现在,我们只需要在模板 topic_posts.html 和 reply_topic.html 中修改一下 form。
{{ post.message }}
修改为:
{{ post.get_message_as_markdown }}
从现在起,用户就可以在帖子中使用 Mardown 语法来编辑了。
Markdown 编辑器
我们还可以添加一个名为 [SimpleMD](**)** 的非常酷的 Markdown 编辑器。
可以下载 JavaScript 库,后者使用他们的CDN:
<link rel="stylesheet" href="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.css">
<script src="https://cdn.jsdelivr.net/simplemde/latest/simplemde.min.js"></script>
现在来编辑一下 base.html ,为这些额外的Javascripts声明一个block (译者注:方便其他模板继承):
#templates/base.html
<script src="{% static 'js/jquery-3.2.1.min.js' %}"></script>
<script src="{% static 'js/popper.min.js' %}"></script>
<script src="{% static 'js/bootstrap.min.js' %}"></script>
{% block javascript %}{% endblock %} <!-- Add this emptyblock here! -->
#首先来编辑 reply_topic.html 模板:
#templates/reply_topic.html
{% extends 'base.html' %}
{% load static %}
{% block title %}Post a reply{% endblock %}
{% block stylesheet %}
<link rel="stylesheet" href="{% static 'css/simplemde.min.css' %}">
{% endblock %}
{% block javascript %}
<script src="{% static 'js/simplemde.min.js' %}"></script>
<script>
var simplemde = new SimpleMDE();
</script>
{% endblock %}
默认情况下,这个插件会将它找到的第一个文本区域转换为 markdown 编辑器。
接下来在 edit_post.html 模板中做同样的操作:
#templates/edit_post.html
{% extends 'base.html' %}
{% load static %}
{% block title %}Edit post{% endblock %}
{% block stylesheet %}
<link rel="stylesheet" href="{% static 'css/simplemde.min.css' %}">
{% endblock %}
{% block javascript %}
<script src="{% static 'js/simplemde.min.js' %}"></script>
<script>
var simplemde = new SimpleMDE();
</script>
{% endblock %}

最新文章

  1. Linux常用命令学习6---(vim的使用)
  2. EF INNER JOIN,LEFT JOIN,GROUP JOIN
  3. IOCP入门
  4. centos7安装redis3.2.5
  5. HTML中的图像
  6. PlayerLog.lua --玩家登录通告
  7. hdu 3535 AreYouBusy 分组背包
  8. 淘宝三角做法防CSS2D转换
  9. Python的16个“坑”
  10. UnicodeEncodeError: &lsquo;ascii&rsquo; codec can&rsquo;t encode characters in position xxx ordinal
  11. 安装 RabbitMQ C#使用-摘自网络(包括RabbitMQ的配置)
  12. 新API:AttachThreadInput
  13. asp.net,mvc4,mysql数据库,Ef遇到问题集合
  14. offsetWidth,offsetHeight到底该如何理解?
  15. CS Round#49 C Max Substring
  16. Lucene 的索引文件锁原理
  17. CSS中容易混淆的伪元素类型和用法
  18. python学习日记(模块导入)
  19. windows7 java环境配置
  20. datePecker时间控件区间写法

热门文章

  1. String类的intern()方法
  2. 对 /dev/shm的认识
  3. clamav杀毒软件的安装
  4. 迷你MVVM框架 avalonjs 学习教程18、一步步做一个todoMVC
  5. springmvc获取资源文件的两种方式(超简单)
  6. HTTP Response Code 中文详解
  7. codeblocks 更换颜色主题
  8. scanf与printf
  9. 神经网络出现nan原因?以及解决
  10. C++强制转换