首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CommonMark中使用Django的urlize

在CommonMark中使用Django的urlize
EN

Stack Overflow用户
提问于 2015-04-08 02:26:10
回答 1查看 614关注 0票数 1

我想使用Django的乌利泽函数和django-标记什么CommonMark过滤器。

我在想象这样的事情:

代码语言:javascript
复制
{{ "http://example.com"|urlize|commonmark }}

输出<p><a href="http://example.com">http://example.com</a></p>。这里的问题是,已经在常见标记(如<http://example.com> )中标记的URL将在其周围呈现带有角括号的URL。

如果我将urlize应用于commonmark之后,如下所示:

代码语言:javascript
复制
{{ "http://example.com"|commonmark|urlize }}

urlize函数没有检测到<p>http://example.com</p>中的url (并且在urlize文档中提到它不能像预期的那样工作)。

我还没有想出解决办法,所以如果你有什么想法,请告诉我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 19:40:45

为了完整起见,简单的答案是切换到Markdown解析器,它提供了您想要的行为。存在多个扩展,这给Python提供了所需的行为。

但是,如果您希望使用不支持此行为本身的CommonMark来进行此行为,那么您将需要创建一个自定义urlize过滤器,该过滤器在HTML上运行。幸运的是,Bleach库提供了一个链接化函数,它将正确地处理这个问题。

当然,您需要创建一个模板过滤器,它封装如下:

代码语言:javascript
复制
from django import template
import bleach
from html5lib.tokenizer import HTMLTokenizer

register = template.Library()

@register.filter(is_safe=True)
def linkify(value):
    return bleach.linkify(value, skip_pre=True, parse_email=True, tokenizer=HTMLTokenizer)

请注意,我假设您确实希望解析电子邮件地址以及URL,您不希望解析代码块中的URL,也不希望CommonMark的输出被解析。请随时查看Bleach的文档并进行相应的调整。

若要使用自定义筛选器,请将上述代码保存到应用程序中的linkify.py目录中的一个名为templatetags的文件中(有关详细说明,请参阅Django 文档 )。然后在模板中执行以下操作:

代码语言:javascript
复制
{% load linkify %}

{{ "http://example.com"|commonmark|linkify }}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29504839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档