Django的一个简单自定义字段,可以安全地呈现Markdown并将其存储在数据库中。

django-markdownfield的Python项目详细描述


django markdownfieldPyPI

一个简单的Django自定义字段,可以安全地呈现Markdown并将其存储在数据库中。在

您的文本存储在MarkdownField中。保存模型后,django markdownfield将 解析Markdown,呈现它,用bleach清理它,然后存储 结果在RenderedMarkdownField中显示给最终用户。在

django markdownfield还实现了EasyMDE 在管理视图中的编辑器,使使用标记更容易。在

alt test

实施

实现django markdownfield很简单。请参见下面的示例。在

fromdjango.dbimportmodelsfrommarkdownfield.modelsimportMarkdownField,RenderedMarkdownFieldfrommarkdownfield.validatorsimportVALIDATOR_STANDARDclassPage(models.Model):text=MarkdownField(rendered_field='text_rendered',validator=VALIDATOR_STANDARD)text_rendered=RenderedMarkdownField()

请在您的Django配置中设置SITE_URL,它将用于检测 外部链接。在

^{pr2}$

要禁用EasyMDE编辑器,请参阅下面的修订行。在

text=MarkdownField(rendered_field='text_rendered',use_editor=False,use_admin_editor=True)

在模板中使用

要在模板中使用呈现的标记,只需使用您在上面创建的RenderedMarkdownField() 就像下面的模型。这个字段应该用safe过滤器标记为安全的,以确保它 显示正确。在

{{ post.text_rendered | safe }}

验证器

django markdownfield附带了许多验证器,用于处理和清理 降价引擎的输出

验证器标准

frommarkdownfield.validatorsimportVALIDATOR_STANDARD

此验证器将删除标准降价未使用的所有标记。它还自动链接 输出中的任何URL,添加class="external"rel="nofollow noopener noreferrer",以及 target="_blank"指向它确定为外部的任何url。在

验证程序\u CLASSY

frommarkdownfield.validatorsimportVALIDATOR_CLASSY

这个验证器与VALIDATOR_STANDARD基本相同,但它允许您在 链接和图像。这对于创建按钮和其他增强的链接非常有用。在

验证器_NULL

frommarkdownfield.validatorsimportVALIDATOR_NULL

这个验证器根本不调用bleach来清理输出。 这是对用户输入不安全。它允许在降价输入中使用任意(不安全)的HTML。在

创建自定义验证器

要创建自定义验证器,只需创建markdownfield.validators.Validator的实例 数据类。下面是一个例子。在

frommarkdownfield.validatorsimportValidator# allows only bold and italic textVALIDATOR_COMMENTS=Validator(allowed_tags=["b","i","strong","em"],allowed_attrs={},linkify=False)

您还可以在markdownfield.validators中找到一组标准的标记安全标记和属性,并扩展 那个。在

frommarkdownfield.validatorsimportValidator,MARKDOWN_TAGS,MARKDOWN_ATTRS# allows all standard markdown features,# but also allows the class to be set on images and linksVALIDATOR_CLASSY=Validator(allowed_tags=MARKDOWN_TAGS,allowed_attrs={**MARKDOWN_ATTRS,'img':['src','alt','title','class'],'a':['href','alt','title','name','class']})

许可证

这个软件是在麻省理工学院许可下发布的。在

Copyright (c) 2019 Luke Rogers

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java+Brave+Zipkin:问题是,跟踪总是一样的   swing能否取消Java中的特定TimerTask?   java以编程方式重新运行失败的TestNG测试   java DefaultMessageListenerContainer未从IBM MQ读取消息   使循环结果显示在一个数组到一个数组中。Java中的toString   tomcat java。lang.NoClassDefFoundError在对GlassFish/Payara部署战争时出错   Java中的增量算法   Java中lambda类的类名是什么意思?   java图像url无法加载安卓 Imageview实际图像为“PNG”格式   java如何使用JPA使库对象数据库持久化?   java如何让onClickListener从另一个活动接收意图信息   运行时如何使Java程序反复启动   java如何在Spring上的ApacheCamel中一开始就并行运行两条路由?   java如何使用SeleniumWebDriver从以下div获取文本   将Google电子表格API与JAVA一起使用时,引用中的excel公式单元格值未更新   fileinputstream如何在Java中读/写HashMap对象到文件?   使用java调用Postgresql的过程   仅在集合中使用java方法