Flask博客开发——Tinymce编辑器

 之前Flask博客的文本编辑器比较简陋,这里为博客添加个优雅易用的Tinymce文本编辑器。

github见:https://github.com/ikheu/my_flasky

1 项目中添加Tinymce

下载好Tinymce包以及语言包,并添加到项目中。添加到项目的方法,参考了这篇文章:Pyhton日记——给Flask加上优雅的TinyMCE编辑器。tinymce_setup.js是配置文件,设置了文本编辑器的语言、按钮等。

2 编辑器表单

为了和其它表单的风格保持一致,这里仍使用了Flask-wtf表单。配置文件tinymce_setup.js中标识了id为content的标签作为Tinymce编辑器显示,这里为editor字段添加了相应的指示。测试发现,表单的editor显示为Tinymce后,使用验证函数无法对输入进行判断,这里将输入的判断放入视图函数中。

class EditorForm(FlaskForm):title = StringField('标题', validators=[DataRequired(),  Length(1, 64)])editor = TextAreaField('正文', id = 'content')submit = SubmitField('发表')

3 视图函数

使用request.method判断请求为POST后,判断输入是否为空,若无输入则给予flask消息提醒。若已登录的用户具有写博客的权限,则输入的内容作为Post的body_html属性创建新的博客。Tinymce将输入的文本内容转为html代码,因此这里使用body_html,而不使用body。

@main.route('/editor', methods=['GET', 'POST'])
@login_required
def editor():''' 编辑器界面 '''form = EditorForm()if request.method == 'POST':if not form.editor.data:flash('Write something.')return render_template('editor.html', form=form)if current_user.can(Permission.WRITE_ARTICLES):print(request.form)post = Post(title=request.form['title'],body_html=request.form['editor'],author=current_user._get_current_object())db.session.add(post)db.session.commit()return redirect(url_for('.post', id=post.id))return render_template('editor.html', form = form)

4 编辑器页面

在editor.html中加入tinymce.min.js、tinymce_setup.js这两个文件。使用wtf.quick_form渲染编辑器表单。

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}
{% block title %}Editor{% endblock %}
{% block head %}
{{ super() }}<script src="{{ url_for('static', filename='tinymce/js/tinymce/tinymce.min.js') }}"></script><script src="{{ url_for('static', filename='js/tinymce_setup.js') }}"></script>
{% endblock %}{% block page_content %}
{{ wtf.quick_form(form) }}
{% endblock %}

 

编辑器界面显示如下:

5 代码高亮

 在编辑界面上,代码是可以高亮的:

 

提交后,由于没有关联到任何渲染样式,代码自然无法高亮:

为了保证提交前后的显示是一样的,仍想使用与tinyMCE编辑窗口中的样式来渲染提交后的页面。查了tinyMCE官网发现,需要手动配置js和css文件。下载渲染程序并添加到文章页的html文件中:

{% block head %}{{ super() }}
    <link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='prism.css') }}">
    <script src="{{ url_for('static', filename='js/prism.js') }}"></script>
{% endblock %}

刷新文章页,显示如下:

大功告成。

 

转载于:https://www.cnblogs.com/ik-heu/p/8846556.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280526.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go开发Struct转换成map两种方式比较

最近做Go开发的时候接触到了一个新的orm第三方框架gorose&#xff0c;在使用的过程中&#xff0c;发现没有类似beego进行直接对struct结构进行操作的方法&#xff0c;有部分API是通过map进行数据库相关操作&#xff0c;那么就需要我们把struct转化成map&#xff0c;下面是是我尝…

Hello, Raspberry Pi.

1.概要最近在研究自动升级开源项目的时候偶然想到IoT领域的自动升级&#xff0c;突然想起2016年买的树莓派&#xff08;Raspberry Pi&#xff09;。那就分享一下如何入门树莓派的教程&#xff0c;我当时一共买了两块一款是Raspberry Pi 3b&#xff08;2016年价格259元去年以抽奖…

supersu_SuperSU已从Play商店中删除,这是替代使用的方法

supersuSuperSU has long been a staple in the rooted Android community. For years, the process for getting a rooted handset was: unlock the bootloader, flash a custom recovery, install SuperSU. That’s just how it was. 长期以来&#xff0c;SuperSU一直是扎根于…

Oracle 11g DRCP连接方式——基本原理

学习Oracle是一个复杂、繁琐的过程。在浩如烟海的Oracle官方资料、新特性、MOS资料和各种Internal知识面前&#xff0c;我们总是觉得力不从心、不知所措。但是&#xff0c;这往往也就是我们不断坚持、积累和追寻的乐趣。  在Oracle 11g中&#xff0c;提出了突破传统专用/共享…

django项目开发1:搭建虚拟环境

需求 不同项目依赖不同模块版本&#xff0c;不能共用一套环境&#xff0c;虚拟环境。在系统的python环境安装 安装 pip3 install virtualenv pip3 install virtualenvwrapper-win环境变量 # 配置环境变量&#xff1a; # 控制面板 > 系统和安全 > 系统 > 高级系统设…

IPC之——消息队列

消息队列作用&#xff1a; 可以用于两个没有联系的进程间通信&#xff0c;创建一个消息队列类似于打开了一个文件&#xff0c;两个不同的进程都可以进行操作 消息队列之函数介绍&#xff1a; 头文件&#xff1a;<sys/type.h> <sys/ipc.h> <sys/msg.h> 1.msgg…

【招聘(上海)】To B数字化营销公司-市场易,直招.NET后端研发工程师

【招聘背景】公司&#xff1a;上海光潾网络科技有限公司成立于2016年&#xff0c;系上海市高新技术企业&#xff0c;2021年获数千万A轮融资项目&#xff1a;公司自主研发营销自动化SaaS平台- 市场易 (Custouch) &#xff0c;通过数字手段为B2B营销赋能&#xff0c;现服务100多家…

div 包裹_如何查看到达之前收到的包裹和邮件

div 包裹The United States Postal Service, UPS, and FedEx all offer online dashboards where you can see exactly what packages (and letters, in the case of the US Postal Service) are scheduled to arrive at your address. They’ll even email and send you text …

py文件的运行

安装过程及配置 安装过程准备&#xff1a; 下载好Python的安装程序后&#xff0c;开始安装&#xff0c;在进入安装界面后一定确保勾选将Python加入到系统环境变量的路径里。如图所示&#xff1a; 2如果没有选取&#xff0c;那么按照下面的步骤进行操作。在桌面上用鼠标右键点击…

加州大学信息科学院长:数据科学课程不只是工程师才修的

一般在考虑围绕数据科学的基础教育时&#xff0c;传统上的重点仍停留在计算和工程等硬性技能上。不过&#xff0c;在周四于纽约市召开的GigaOm结构数据&#xff08;Structure Data&#xff09;会议上&#xff0c;美国加州大学伯克利分校信息科学院长AnnaLee Saxenian教授表示&a…

查看安装软件/Select-object/Where-Object xxx -like

查看已安装软件 1.通过注册列表查看 $Path(HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*,HKCU:\SOFTWARE\WOW6432…

网络编程基础(一)

一.楔子 你现在已经学会了写python代码&#xff0c;假如你写了两个python文件a.py和b.py&#xff0c;分别去运行&#xff0c;你就会发现&#xff0c;这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据&#xff0c;你要怎么做呢&#xff1f; 这个问题以…

dotnet-exec 让 C# 程序更简单

dotnet-exec 让 C# 程序更简单Introdotnet-exec是一个可以执行 C# 程序而不需要项目文件的命令行工具&#xff0c;并且你可以指定自定义的入口方法不仅仅是Main方法在 python/NodeJs 里&#xff0c;可以使用python xx.py/node xx.js来运行代码&#xff0c;在 C# 中一般是需要项…

office数据集dslr_如何将照片从DSLR无线传输到智能手机

office数据集dslrYou’ve got a great digital camera. You’ve got all your social media apps on your phone. Wouldn’t it be nice if you could snap a beautiful shot with your DSLR and shuttle it right over to your phone to throw up on Facebook or Instagram? …

文件管理、命令别名和glob

一、复制命令:cp src dest1.如果scr是文件a.如果dest不存在&#xff0c;则新建dest并将src的内容填充到dest里b.如果dest存在&#xff0c;则会用src里的内容覆盖dest里的内容&#xff0c;即覆盖dest2.如果src是目录a.如果dest不存在&#xff0c;则新建dest,然后把src下的内容复…

大数据汇聚全球精英

投资10亿美元&#xff0c;选址贵安新区&#xff0c;建设iCloud服务的中国主数据中心。7月12日苹果公司的这一举动再次将全球目光聚集在贵州。 “贵州有令人瞩目的增长&#xff0c;是中国新数据中心领域最具发展潜力的地点之一。”苹果公司环境、政策和社会事务副总裁丽萨杰克逊…

django版本区别/与版本匹配

一、区别 路由层 1.django 1.x路由层使用url方法 django 2.x和3.x版本使用path方法 url() 第一个参数支持正则 path()第一个参数是不支持正则的 可以使用 re_path替代url() from django.urls import re_path # django2.0中的re_path #不建议导入url,不能区分版本 #from djang…

复制

ab,像这样的复制&#xff0c;本质上a与b引用的是同一对象&#xff0c;当a改变时相应的b也会做出同样的改变&#xff1b; 对于列表和字典这样的容器对象分为&#xff1a;浅层复制blist(a)和深层复制bcopy.deepcopy(a) 浅层复制对对象共有的元素进行改变时同时改变&#xff1b; 深…

天坑,这样一个lambda随机取数据也有Bug

前几天&#xff0c;一位网友跟我说他编写的一段很简单的代码遇到了奇怪的Bug&#xff0c;他要达到的效果是从一个List中随机取出来一条数据&#xff0c;代码如下&#xff1a;var random new Random(); var users Enumerable.Range(0, 10).Select(p > new User(p, "A&…

中兴面试一个星期没有回音_如何在没有回声的情况下从亚马逊获取即时时尚建议...

中兴面试一个星期没有回音The Echo Look is a new device from Amazon that’s able to take a look at your outfits and tell you which one looks the best on you. However, you actually don’t need the Echo Look to get this kind of instant fashion advice from Amaz…