Python 使所有单词都以“开始”@&引用;及#&引用;可点击
我正在创建一个项目,允许用户单击以“#”和“@”开头的单词。我成功地使hashtag的单词工作,但当我试图同时实现这两个单词时,出现了一个问题 我使用正则表达式操作返回值并将其标记为安全,因为它是一个html标记 在模板标记文件中,我这样做了Python 使所有单词都以“开始”@&引用;及#&引用;可点击,python,django,Python,Django,我正在创建一个项目,允许用户单击以“#”和“@”开头的单词。我成功地使hashtag的单词工作,但当我试图同时实现这两个单词时,出现了一个问题 我使用正则表达式操作返回值并将其标记为安全,因为它是一个html标记 在模板标记文件中,我这样做了 def create_hashtag_link(tag): url = "/hash/?hash={}".format(tag) # or: url = reverse("hashtag", args=(tag,)) return
def create_hashtag_link(tag):
url = "/hash/?hash={}".format(tag)
# or: url = reverse("hashtag", args=(tag,))
return '<a href="{}">#{}</a>'.format(url, tag)
@register.filter()
def hashtag_links(value):
return mark_safe(
re.sub(r"#(\w+)", lambda m: create_hashtag_link(m.group(1)),
escape(value)))
def create_mention_link(mention):
link = "/mention/?user={}".format(mention)
return '<a href="{}">{}</a>'.format(link, mention)
@register.filter()
def mention_link(value):
return mark_safe(
re.sub(r"@(\w+)", lambda x: create_mention_link(x.group(0)),
escape(value)))
{{ post.content|truncatewords:"19"|mention_link|hashtag_links }}
它的输出是:
#testing things out <a href="/mention/?user=lol">lol</a>
#测试东西
hashtag有效,但“@”无效
#测试东西
这不对吗?链接看起来像期望的结果
除非它是按字面意思呈现上述内容
试试这个
def create_hashtag_link(tag):
url = "/hash/?hash={}".format(tag)
# or: url = reverse("hashtag", args=(tag,))
return '<a href="{}">#{}</a>'.format(url, tag)
@register.filter()
def hashtag_links(value):
return mark_safe(
re.sub(r"#(\w+)", lambda m: create_hashtag_link(m.group(1)),
value))
def create_mention_link(mention):
link = "/mention/?user={}".format(mention)
return '<a href="{}">{}</a>'.format(link, mention)
@register.filter()
def mention_link(value):
return mark_safe(
re.sub(r"@(\w+)", lambda x: create_mention_link(x.group(0)),
value))
def创建标签链接(标签):
url=“/hash/?hash={}”。格式(标记)
#或者:url=reverse(“hashtag”,args=(tag,))
返回“”。格式(url、标记)
@register.filter()
def标签链接(值):
安全返回标记(
re.sub(r“#”(\w+),lambda m:创建标签链接(m.group(1)),
(价值)
def创建_提及_链接(提及):
link=“/TINCE/?user={}”。格式(TINCE)
返回“”。格式(链接,提及)
@register.filter()
def提及链接(值):
安全返回标记(
re.sub(r“@(\w+),lambda x:创建链接(x.group(0)),
(价值)
基本上,escape
执行以下操作()
返回带有符号、引号和尖括号的给定文本
为在HTML中使用而编码
我认为,一旦您应用了其中一个过滤器,由于您执行了escape(value)
操作,现在您已经对整个内容进行了转义,除了替换的部分。当您应用第二个过滤器时,此过程将重复,您将替换某些零件,但现在将转义未触及的部分。我怀疑最终结果(如果您使用了页面源代码)如下所示:
things out a href=“/nity/?user=@lol”@lol/a
因此,hashtag(因为它是最后应用的)是可以的,但是链接实际上没有呈现为html。您的输入是什么(
post.content
)?@Selcuk我不确定您的意思,post.content是一个包含post content的字段该变量的内容是什么?你能举个例子吗?它似乎没有把#testing
转换成一个链接。啊,好吧,被>hashtag工作弄糊涂了,但是“@”并没有表现出来#逐字逐句地测试,而“安全”过滤器并不是working@Akindele好的,在这种情况下,请尝试删除escape
函数调用。该调用正常,谢谢,你能解释一下你是怎么知道它是逃逸功能的吗?