gpt4 book ai didi

python - 使所有以 "@"和 "#"开头的单词可点击

转载 作者:行者123 更新时间:2023-12-01 07:54:14 25 4
gpt4 key购买 nike

我正在创建一个项目,允许用户单击以“#”和“@”开头的单词,我设法让主题标签工作,但是当我尝试同时实现这两个单词时,出现了问题

我使用正则表达式操作来返回值和mark_safe,因为它是一个html标签

在模板 tag_files 中我这样做了

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>

主题标签有效,但“@”无效

最佳答案

#testing things out <a href="/mention/?user=lol">lol</a>

这不是正确的吗?该链接看起来像所需的结果吗?

除非它按字面意思呈现上面的内容

<小时/><小时/>

试试这个

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))

基本上,escape执行以下操作 ( source )

Returns the given text with ampersands, quotes and angle brackets encoded for use in HTML.

我认为一旦你应用了其中一个过滤器,因为你这样做了 escape(value)现在,除了您替换的部分之外,您已经转义了整个内容。当您应用第二个过滤器时,会重复此过程,您替换了某些部分,但未触及的部分现在已被转义。我怀疑最终结果(如果您做了页面源代码)将如下所示:

<a href="/hash/?hash=testing">#testing</a> things out &lt;a href=&quot;/mention/?user=@lol&quot;&gt;@lol&lt;/a&gt;

因此主题标签(因为它是最后应用的)没问题,但链接实际上并未呈现为 html。

关于python - 使所有以 "@"和 "#"开头的单词可点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56051217/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com