В django хештег не совпадает с URL - PullRequest
0 голосов
/ 11 февраля 2020

Мои URL не совпадают с хэштегами. там написано 404 URL не найден. это моя база. html с хэштегом:

 $(document).ready(function() {
      $("p").each(function(data) {
        var strText = $(this).html();
        console.log('1. strText=', strText);
        var arrElems = strText.match(/#[a-zA-Z0-9]+/g);
        console.log('arrElems=', arrElems);
        $.each(arrElems, function(index, value){
          strText = strText.toString().replace(value, '<a href="/tags/'+value+'">'+value+'</a>');
        });
        console.log('2. strText=', strText);
        $(this).html(strText);
      });
    });

мой hshtag models.py:

from django.db import models
from blog.models import post

# Create your models here.
class HashTag(models.Model):
    tag = models.CharField(max_length=120)
    timestamp = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.tag

    def get_postss(self):
        return post.objects.filter(content__icontains="#" + self.tag)

это мой вид хэштега:

from django.shortcuts import render
from django.views import View
from .models import HashTag
# Create your views here.


class HashTagView(View):
    def get(self, request, hashtag, *args, **kwargs):
        obj, created = HashTag.objects.get_or_create(tag=hashtag)
        return render(request, 'hashtags/tag_view.html', {"obj": obj})

я поместил URL в основной URL моего сайта:

from hashtags.views import HashTagView
from django.urls import path, re_path, include

urlpatterns = [

re_path(r'^tags/(?P<hashtag>.*)/$', HashTagView.as_view(), name='hashtag'),

]

1 Ответ

0 голосов
/ 11 февраля 2020

Есть одна проблема с вашей реализацией. 1. Браузер не отправляет # часть на сервер. Таким образом, если ваш URL-адрес похож на /tags/#tag, то #tag не будет отправлено на сервер. Подробнее читайте: Почему часть URL-адреса ha sh недоступна на стороне сервера?

Из-за этого поведения ваш браузер будет отображать /tags/ url. Вот причина вашей 404 ошибки.

Вы можете проверить пример в твиттере. Если хэштегом является # DelhiElectionResults , тогда URL этого хэштега https://twitter.com/hashtag/DelhiElectionResults.

Решение: Просто удалите # из URL и сделайте так: /tags/tag/. В вашем JS вы можете использовать value.replace('#', '') для удаления # из значения.

$.each(arrElems, function(index, value){
    strText = strText.toString().replace(value, '<a href="/tags/'+value.replace('#', '')+'">'+value+'</a>');
    });
...