如何制作过滤器以检查是否有人用@标记了用户?

时间:2015-04-19 19:48:39

标签: python flask jinja2

我正在建立一个社交网站。我想知道如何在python中创建一个jinja过滤器来创建任何以@链接开头的单词。

1 个答案:

答案 0 :(得分:2)

这是您可以使用的Jinja过滤器:

from flask import Markup

def linkify(text):
    return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text))

它找到以@开头的用户名,包含小写或大写字母,数字和下划线。它会将其替换为配置文件的链接(\1代表其用户名而不包含@

以下是您如何将其添加到您的环境中:

 app.jinja_env.filters['linkify'] = linkify

从Jinja模板中调用它:

{{ post|linkify }}

修改

在Python shell中运行:

>>> import re
>>> text = 'This is a post mentioning @nathancahill and @jacob_bennet'
>>> re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text)
'This is a post mentioning <a href="/nathancahill">@nathancahill</a> and <a href="/jacob_bennet">@jacob_bennet</a>'

你得到相同的输出吗?