我一直计划将markdown用于网站的许多静态内容。

给定Python的markdown模块,这很容易做到,但是我注意到Django曾经具有内置的markdown支持,而该支持在1.5版中已弃用。我想这是有充分的理由的,如果这是个坏主意,我本人对走同一条路没有兴趣。

为何在Django中弃用内置markdown支持的原因是什么,这些原因是否仍然适用于Django 1.9+中一般的markdown使用?

最佳答案

首先,不仅删除了Markdown支持,还删除了contrib.markup库。该库包含Markdown,reStructeredText和Textile的模板过滤器。因此,声明删除所有轻量级标记语言过滤器将更为准确。我记得有多种原因:


大约在那个时候,人们正在努力将许多“贡献”程序包分解成第三方应用程序。 contrib.markup是这样的软件包。一些普遍的原因是,这些功能不是框架使用的核心功能,它们未经充分测试,或者文档记录不充分,等等。
轻量级标记语言库是移动的目标。由于它们比Django小得多,因此可以以较短的发布周期发布,而Django需要“很长时间”才能“赶上”。然后每种语言将处于与下一种不同的循环中。每种语言都必须由自己的第三方Django App支持,这才是有意义的,它可以与标记语言库始终保持最新关系。
“ contrib”应用仅提供模板过滤器。但是,还有其他方法可以在Django中支持标记语言(数据库字段,表单字段等)。某些第三方库实际上包含了这些功能,以提供更完整的支持。
当允许不受信任的用户将标记发布到您的网站时,存在一些安全问题(主要是XSS)(例如注释)。尽管可以采取一些措施来减轻这种担忧,但是Django开发人员不想承担额外的工作来保证安全的解决方案。请注意,只有受信任的经过身份验证的用户提供内容时,才不存在此类问题(有关安全性问题的说明,请参见此article)。


资料来源:


https://code.djangoproject.com/ticket/18054
https://groups.google.com/d/msg/django-developers/tRpwMudkCfo/xXWQNrpOUagJ
https://groups.google.com/d/msg/django-developers/kaW0z03TWvc/81mdKlRbfYMJ
我的记忆。虽然我的记忆并不完全可靠,但当时我积极参与Django的开发,并密切关注所有开发人员的讨论。

07-24 09:45
查看更多