TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,支持目前流行的各种浏览器,由JavaScript写成。 功能配置灵活简单(两行代码就可以将编辑器嵌入网页中),支持AJAX。另一特点是加载速度非常快。

django里引用TinyMCE富文本编辑器,其实很简单,前提是你知道django的静态文件配置。 其实这个我已经在前面文章提到过,可以回去再看看。

TinyMCE的官方网站是:http://www.tinymce.com/

下载地址:http://download.moxiecode.com/tinymce/tinymce_4.1.9.zip

TinyMCE的最新版本是4.1.9,下面是官网截屏:

下载下来后,我们把它解压到工程的static/目录下面,如下图所示:

安装原理

安装的原理很简单,只需要在使用编辑器的页面里引用tinymce.min.js文件并初始化就可以了。 tinymce.min.js文件在tinymce项目里, tinymce.min.js会根据初始配置里的信息找到需要用编辑器的html节点。

例如在post_edit.html页面使用编辑器,只需要在模板文件写下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{% load staticfiles %}
{% block header %}
<link rel="stylesheet" href="{% static 'tinymce/plugins/upload/plugin.css' %}">
<script type="text/javascript" src="{% static 'tinymce/tinymce.min.js' %}"></script>
<script type="text/javascript">
tinymce.init({
selector: "textarea",
//width: 800,
height: 300,
forced_root_block: false,
plugins: [
"advlist autolink lists link image charmap print preview anchor sh4tinymce upload",
"searchreplace visualblocks code fullscreen",
"insertdatetime table contextmenu paste"
],
toolbar: "insertfile undo redo | styleselect | bold italic | alignleft aligncenter" +
" alignright alignjustify | bullist numlist outdent indent | preview link image sh4tinymce"
});
</script>
{% endblock %}

这段代码的含义是 初始化 tinyMCE编辑器,selector指需要将编辑器显示在html那个标签节点, 这里选了textareas。则表示会变成编辑器所在的位置。

另外,我还自定义一下编辑器的高度、插件、菜单项目等。具体详细配置请参考官方文档,写的都比较清楚。

给TinyMCE增加一个addmore插件

需求很简单,就是每次我写文章的时候需要插入某个<!--more-->标签, 这样可以在列表页面先只显示文章的一部分,然后碰到这个more标签就显示一个”点击阅读更多”的链接。

第一步,在tinymce/plugins文件下新增一个addmore文件夹,然后在里面新建一个plugin.min.js文件, 内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
tinymce.PluginManager.add("addmore", function (a) {
a.addCommand("InsertMoreRule", function () {
a.execCommand("mceInsertContent", !1, "[!--more--]")
}), a.addButton("addmore", {
icon: "addmore",
tooltip: "Insert More",
cmd: "InsertMoreRule"
}), a.addMenuItem("addmore", {
icon: "addmore",
text: "Insert More",
cmd: "InsertMoreRule",
context: "insert"
})
});

在post_edit.html中修改tinymce.init方法,plugins项目后面添加一个addmore:

...
plugins: [
"advlist autolink lists link image charmap print preview anchor sh4tinymce upload",
"searchreplace visualblocks code fullscreen",
"insertdatetime table contextmenu paste addmore"
],
...

再看看效果,没问题了。

SyntaxHighlighter代码高亮

程序员写博客当然少不了代码高亮,这个功能页很容易实现。有一款插件叫SyntaxHighlighter值的推荐。

项目主页:http://alexgorbatchev.com/SyntaxHighlighter/

下载地址:http://alexgorbatchev.com/SyntaxHighlighter/download/download.php?sh_current

下载下来后直接解压到static/目录下面,这个跟tinymce是一样的原理。

使用方法

只需要修改django页面的基础模板就行了,非常简单。

打开mysite/templates/mysite/base.html页面,引入syntaxhighlighter:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{% load staticfiles %}
{% load i18n %}
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
<!-- Optional theme -->
<link rel="stylesheet" href="{% static 'css/bootstrap-theme.min.css' %}">
<!-- Blog CSS-->
<link rel="stylesheet" href="{% static 'css/blog.css' %}">
<link type="text/css" rel="stylesheet" href="{% static 'syntaxhighlighter/styles/shCoreDefault.css' %}"/>
<script type="text/javascript" src="{% static 'syntaxhighlighter/scripts/shCore.js' %}"></script>
<script type="text/javascript">SyntaxHighlighter.all();</script>
<!-- Latest compiled and minified JavaScript -->
<script src="{% static 'js/jquery-1.11.1.min.js' %}"></script>
<script src="{% static 'js/base.js' %}"></script>
<script src="{% static 'js/bootstrap.min.js' %}"></script>
{% block header %}
{% endblock %}
<title>{% trans 'Simple Blog'%}</title>
</head>
<body class="customize-support">
中间省略...
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushJScript.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushBash.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushPhp.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushJava.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushSql.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushXml.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushPython.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushCss.js' %}"></script>
<script class="javascript" src="{% static 'syntaxhighlighter/scripts/shBrushCpp.js' %}"></script>
</body>
</html>

由于我们之前已经安装过了TinyMCE,这个跟它结合起来就非常好用了,因为TinyMCE自带有选择代码语言功能。

下面是我创建文章时,插入了一段python代码的示例:

这个是保存后的效果:

最后一件事

别忘了部署到Heroku上面和别人分享你的成果。

OK,到此为止,前台的各种功能已经差不多了,你能一直坚持学到这里很不错了,为你自己鼓掌吧。

后面还有一个重头戏,就是django的后台管理,我选择了更美观更好用的xamdin,敬请期待…

Django1.9开发博客(11)- 富文本与代码高亮的更多相关文章

  1. Django1.7开发博客

    转自: http://www.pycoding.com/articles/category/django 基于最新的django1.7写的,通俗易懂,非常适合新手入门. 感谢博主! 参考教程: htt ...

  2. HelloDjango 第 09 篇:让博客支持 Markdown 语法和代码高亮

    作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 为了让博客文章具有良好的排版,显示更加丰富的格式,我们使用 Markdown 语法来书 ...

  3. Django1.9开发博客(14)- 集成Xadmin

    xadmin是一个django的管理后台实现,使用了更加灵活的架构设计及Bootstrap UI框架, 目的是替换现有的admin,国人开发,有许多新的特性: 兼容 Django Admin 使用 B ...

  4. Django1.9开发博客(12)- i18n国际化

    国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...

  5. Django1.9开发博客(8)- 继续完善

    到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了. 我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现. 草稿箱 之前我们新建文章的 ...

  6. Django1.9开发博客(7)- 实现功能

    到目前为止我们已经完成了一个django应用的所有基础部分. 包括url配置.视图.模型和模板.接下来开始继续完善我们的博客系统了. 首先我们需要一个显示每篇文章的详细页面,对不? 文章详情 对于首页 ...

  7. 基于 abp vNext 和 .NET Core 开发博客项目 - 数据访问和代码优先

    上一篇文章(https://www.cnblogs.com/meowv/p/12909558.html)完善了项目中的代码,接入了Swagger.本篇主要使用Entity Framework Core ...

  8. [技术博客]React Native——HTML页面代码高亮&数学公式解析

    问题起源 原有博文显示时代码无法高亮,白底黑字的视觉效果不好. 原有博文中无法解析数学公式,导致页面会直接显示数学公式源码. 为了解决这两个问题,尝试了一些方法,最终利用开源类库实现了页面美化. (失 ...

  9. Django1.9开发博客(13)- redis缓存

    Redis 是一个高性能的key-value数据库.redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用. 它提供了Pyth ...

随机推荐

  1. SQL调优

    # 问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系 ...

  2. MetInfo数据库结构表

    met_admin_table 表 Key 字段名称 数据类型 不为空 默认值 说明 PK id INT(11) Yes   编号   admin_type TEXT Yes   管理员类型   ad ...

  3. CentOS 7 搭建 LNMP

    一.安装httpd 1.yum install httpd -y 2.启动服务:systemctl start httpd 3.设置开机启动:systemctl enable 二.安装mariadb ...

  4. [Android Tips] 9. framework notification layout font size

    android 4.4 framework notification layout 相关字体大小 * title: notification_title_text_size: 18dp * conte ...

  5. sdutoj 2610 Boring Counting

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2610 Boring Counting Time ...

  6. 在 ASP.NET 中使用 jQuery.load() 方法

    今天就让我们看看在 ASP.NET 中使用 jQuery.load() 方法来调用 ASP.NET 的方法,实现无刷新的加载数据. 使用 jQuery 的朋友应该知道可以使用 jQuery.load( ...

  7. logback文章推荐

    logback 配置详解:http://www.cnblogs.com/zhuawang/p/4002975.html Logback 日志输出到 mysql:http://www.codeweblo ...

  8. 滑动的Button

    在介绍SwitchButton之前,先来看一下系统Button是如何实现的.源码如下: @RemoteView public class Button extends TextView { publi ...

  9. Centos7下安装配置Redsocks

    Redsocks是一个开源的网络程序,代码依赖开源的libevent网络库.Redsocks允许你将所有TCP连接重定向到SOCKS或HTTPS代理,比如Shadowsocks(Centos7下安装配 ...

  10. 禁止输入中文 与 禁止输入数字在phonegap api环境效果

    例子如下: <!doctype html> <html> <head> <meta charset="utf-8"> <tit ...