在 django 中,hashtag 与 url 不匹配
In django, hashtag is not matching with the urls
我的 urls 与主题标签不匹配。它说 404 url 未找到。
这是我的 base.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.浏览器没有发送#part给服务器。因此,如果您的 URL 类似于 /tags/#tag
,那么 #tag
将不会发送到服务器。进一步阅读:Why is the hash part of the URL not available on the server side?
由于此行为,您的浏览器将点击 /tags/
url。这就是你的 404 错误的原因。
你可以查看twitter的例子,如果hashtag是#DelhiElectionResults,那么那个hashtag的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>');
});
我的 urls 与主题标签不匹配。它说 404 url 未找到。 这是我的 base.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.浏览器没有发送#part给服务器。因此,如果您的 URL 类似于 /tags/#tag
,那么 #tag
将不会发送到服务器。进一步阅读:Why is the hash part of the URL not available on the server side?
由于此行为,您的浏览器将点击 /tags/
url。这就是你的 404 错误的原因。
你可以查看twitter的例子,如果hashtag是#DelhiElectionResults,那么那个hashtag的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>');
});