Django 在字符串中查找 Hashtags 并通过将其包装在 <a> 标记中来替换它

Posted

技术标签:

【中文标题】Django 在字符串中查找 Hashtags 并通过将其包装在 <a> 标记中来替换它【英文标题】:Django Find Hashtags in String and Replace It by Wrapping It in <a> Tag 【发布时间】:2021-11-03 13:33:03 【问题描述】:

我正在制作一个社交媒体网站,我想启用主题标签。例如,如果用户创建这样的帖子:

Summer is gone. #sad #comeback #summer

我想用 python 来替换所有出现的 # 和这样的单词:

Summer is gone. <a href="http://127.0.0.1:8000/c/sad">#sad</a> <a href="http://127.0.0.1:8000/c/comeback">#comeback</a> <a href="http://127.0.0.1:8000/c/summer">#summer</a>

这是我目前所拥有的:

    def clean_content(self):
        content = self.cleaned_data.get('content')
        content = profanity.censor(content) # (Unrelated Code)
        arr = re.findall(r"#(\w+)", content)
        replace_ar = []
        for hsh in arr:
            if len(hsh) < 80:
                if Category.objects.filter(name__iexact=hsh):
                    # Old Category, Added This To Category List (Unrelated Code)
                    replace_ar.append(hsh)
                else:
                    # New Category, Created Category, Then Added This To Category List (Unrelated Code)
                    replace_ar.append(hsh)
            else:
                # Don't do anything, hashtag length too long
       # No Idea What To Do With replace_ar. Need help here.

在上面的代码中,我输入了 html 文本,我找到了所有 #word。然后我遍历它们并检查是否存在具有该名称的类别。如果是,我只是将它添加到该类别,如果不是,我创建一个类别然后添加它。在这两种情况下,我都会将标签推送到 replace_ar 数组。

现在我想将replace_ar 数组中的所有主题标签替换为上面“夏天已经过去”示例中的 url。我该怎么做?

【问题讨论】:

【参考方案1】:

用相关类别的网址替换主题标签(形式:“#categoryname”):

def clean_content(self):
    content = self.cleaned_data.get('content')
    arr = re.findall(r"#(\w+)", content)
    for hsh in arr:
        if len(hsh) < 80:
            full_hash = '#' + hsh
            if Category.objects.filter(name__iexact=hsh):
                content = content.replace(full_hash, f'<a href="http://127.0.0.1:8000/c/hsh/">#hsh</a>')
            else:
                content = content.replace(full_hash, f'<a href="http://127.0.0.1:8000/c/hsh/">#hsh</a>')

请注意,您应该使用reverse,而不是对网址进行硬编码。

【讨论】:

如果你想编辑你对我的工作代码的回答,你可以在这里查看我的工作代码:textdoc.co/kOhJgeENHf1GtyDz

以上是关于Django 在字符串中查找 Hashtags 并通过将其包装在 <a> 标记中来替换它的主要内容,如果未能解决你的问题,请参考以下文章

Zapier Formatter - 字符串中的 Hashtags 单词与豁免

Codeforces 777D:Cloud of Hashtags(水题)

Visual Assist之Hashtags功能简介

如何解释 Python 中正则表达式的重音字符?

如何使用 SwiftUI 从文本中提取 Hashtags?

将 Hashtags 和 Mentions 提取到单独的字段中