Django Найдите хэштеги в строке и замените их, обернув в тег <a>

Заголовок длинноват и может запутать, поэтому позвольте мне объяснить.

Я создаю сайт социальной сети и хочу включить хэштеги. Например, если пользователь создаст пост, подобный этому:

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 и нахожу все #{{слова}}. Затем я просматриваю их и проверяю, существует ли категория с таким названием или нет. Если да, я просто добавляю ее в эту категорию, а если нет, я создаю категорию и затем добавляю ее. В обеих этих ситуациях я выталкиваю хэштег в массив replace_ar.

Теперь я хочу заменить все хэштеги в массиве replace_ar на url, как в примере "Лето прошло", приведенном выше. Как мне это сделать? Спасибо.

Чтобы заменить хэштеги (вида: "#categoryname") на url связанной категории:

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.

Вернуться на верх