Python 如何制作一个过滤器来检查是否有人将用户标记为@?

Python 如何制作一个过滤器来检查是否有人将用户标记为@?,python,flask,jinja2,Python,Flask,Jinja2,我正在制作一个社交网站。我想知道如何在python中创建一个jinja过滤器,以生成任何以@开头的单词,链接到他们的个人资料。这里有一个jinja过滤器,您可以使用: from flask import Markup def linkify(text): return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text)) 并从Jinja模板中调用它: {{ post|linkif

我正在制作一个社交网站。我想知道如何在python中创建一个jinja过滤器,以生成任何以@开头的单词,链接到他们的个人资料。

这里有一个jinja过滤器,您可以使用:

from flask import Markup

def linkify(text):
    return Markup(re.sub(r'@([a-zA-Z0-9_]+)', r'<a href="/\1">@\1</a>', text))
并从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>'
>>重新导入
>>>text='这是一篇提到@nathancahill和@jacob_bennet'的帖子
>>>re.sub(r'@([a-zA-Z0-9_]+)',r'',文本)
“这是一篇提到和

您得到相同的输出吗?

它不会创建链接。它只是创建文本。查看我的编辑在哪里对我有用,不知道你在做什么不同。Jinja只是将html作为文本,而不是实际创建链接。
>>> 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>'