Flask 博客 post 广泛的控制 - 如何控制文本格式、添加链接、图片等的能力

Flask blog post extensive controls - How to control text formating, ability to add links, pictures etc

我正在使用 Flask python web-framework 构建一个 website-blog。我可以创建一个博客 post,其中 content 字段是我 post 的所有文本所在的位置。问题是它只是一个 TextAreaField,带有未格式化的原始文本。在我见过的每个主要论坛(甚至这个 stack-overflow post)中,当您组装 post 时,您都可以使用粗体文本、斜体文本,添加 links,添加 code-styled 文本、添加图片、添加编号列表、标题等。

如何将其中的任何内容添加到我的 post?从视觉上看,我想要的是这些控件:

可以将文本的一部分设为粗体,另一部分设为斜体,添加下划线,添加图片,添加 link,添加代码部分,添加标题(这些将是足以满足我的需求;嵌入视频也不错)。我知道图像可能是一件更困难的事情,因为我 运行 陷入了图像保存位置的问题。将它们全部保存per-post,将它们独立保存在数据库中的另一个table中并link它们到一个单独的post(one-post到many-pictures关系),将它们存储到外部服务(例如 Imgur)?

简而言之,我的 PostModel table(使用 flask_sqlalchemy)包含这些列:titlecontentauthordatePostedtags。我的 PostForm 表单包含字段:title (StringField)、content (TextAreaField) 和 tags (FieldList(FormField())) 和一个按钮 submitField.

如何在我的烧瓶中容纳这些功能 web-app?我是否可以对内容 TextAreaField 中的文本进行格式化,使其以某种方式显示?希望我说清楚了。提前致谢。

我需要的是 WYSIWYG(所见即所得)编辑器。有许多免费提供的,其中流行的有 TinyMCE、Summernote、CKEditor 等。

您当前的代码几乎不需要修改。将它与您的代码集成并不难。您指定所需的库和初始化代码。

通常,您有一个 content 类型的 textarea 字段,这将需要一个 class 属性,如为库指定的(对于 Summernote 说 class="summernoteClass")这样textarea 元素可以通过库的 javascript 代码作为目标。

然后你只需像以前一样将这些内容存储到数据库中。请注意,这可能需要清理内容,以防用户键入任何恶意的 <script>s(如果是这样,我建议使用 bleach python 模块,然后 bleach.clean(str))。

最后要使用 Jinja2 模板框架显示 html 返回(而不是 html 实体),您只需在 html 代码中附加 |safe 即可,像这样:<p class="article-content">{{ post.content | safe }}</p>。也许这会对其他人有所帮助。