Django 在字符串中查找主题标签并通过将其包装在 <a> 标签中来替换它
Django Find Hashtags in String and Replace It by Wrapping It in <a> Tag
我正在制作一个社交媒体网站,我想启用主题标签。例如,如果用户像这样创建 post:
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
数组。
现在我想用 url 替换 replace_ar
数组中的所有主题标签,就像上面的“夏天已经过去”的例子一样。我该怎么做?
用相关类别的 url 替换主题标签(形式:“#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
而不是硬编码 url。
我正在制作一个社交媒体网站,我想启用主题标签。例如,如果用户像这样创建 post:
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
数组。
现在我想用 url 替换 replace_ar
数组中的所有主题标签,就像上面的“夏天已经过去”的例子一样。我该怎么做?
用相关类别的 url 替换主题标签(形式:“#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
而不是硬编码 url。