【发布时间】:2015-01-16 10:32:00
【问题描述】:
用户文本输入如下:
Test 'post'. Post at 8:52 on Feb 3rd. /u/username created it.
This <a href="link">link</a> should not be displayed as a link.
在模板上显示用户输入时,我通过自定义过滤器发送它。这是自定义过滤器:
word_split_re = re.compile(r'(\s+)')
@register.filter
@stringfilter
def customUrlize(value):
words = word_split_re.split(force_text(value))
for i, b in enumerate(words):
if b.startswith('/u/'):
username = b[3:]
if re.match("^[A-Za-z0-9_-]*$", username):
b = "<a href='testLink'>" + b + "</a>"
words[i] = mark_safe(b)
return ''.join(words)
如您所见,我想要做的是以 '/u/' 开头的单词(并且只包含字母、数字、下划线和破折号)用
<a>
标签。使用当前过滤器,所有代码都被转义并显示为:
Test 'post'. Post at 8:52 on Feb 3rd. <a href='testLink'>/u/username</a> created it.
This <a href="link">link</a> should not be displayed as a link.
我想要的是正常显示文本,但 /u/username 是一个链接。
如果我尝试这样做:
return mark_safe(''.join(words))
然后它甚至显示
<a href="link">link</a>
作为链接与
/u/username
如何让它只显示
/u/username
作为链接?
编辑:我使用的是 Django 1.5。
在我的模板中,假设
comment
是一个
CharField
我这样显示评论:
{{ comment|customUrlize }}
【问题讨论】:
标签: django django-templates django-template-filters