我想使用Django的urlize函数和django-markwhat的CommonMark过滤器。在
我在想象这样的事情:
{{ "http://example.com"|urlize|commonmark }}
输出<p><a href="http://example.com">http://example.com</a></p>
。这里的问题是,已经在commonmark中标记的url,比如<http://example.com>
,将在它们周围用尖括号呈现。在
如果我在commonmark
之后应用urlize
,如下所示:
urlize
函数不检测<p>http://example.com</p>
中的url(并且在urlize
文档中提到,对于html输入,它将无法正常工作)。在
我还没有想出一个解决办法,所以如果你有什么想法请告诉我。在
为了完整起见,简单的答案是切换到Markdown解析器,该解析器提供您想要的行为。存在多个extensions,它们为Python Markdown提供了所需的行为。在
但是,如果您希望CommonMark具有这种行为,而CommonMark本身不支持这种行为,那么您需要创建一个在HTML上运行的自定义urlize过滤器。幸运的是,漂白剂库提供了一个linkify函数,可以正确地处理这个问题。在
当然,您还需要创建一个模板过滤器来包装:
请注意,我假设您确实希望解析电子邮件地址和url,您不希望解析代码块中的url,也不希望对CommonMark的输出进行清理。请随时查看漂白剂的文件并进行相应调整。在
要使用自定义过滤器,请将上述代码保存到应用程序中
^{pr2}$templatetags
目录中名为linkify.py
的文件(完整解释请参见Djangodocs)。然后在模板中执行以下操作:相关问题 更多 >
编程相关推荐