У меня очень похожая проблема, подобная этой post. Короче говоря, у меня есть блог django, и для тегов я использую django-taggit, который хорошо работает на странице администратора.
Моя основная проблема заключается в том, что если мне нравится фильтровать тег по URL-адресу, я все равно получаю ошибку 404, хотя я перечитал документацию и пару сообщений stackoverflow:
Страница не найдена (404) Метод запроса: URL запроса GET: http://127.0.0.1:8080/tag/sample/
просмотры.py
from django.utils import timezone
from .models import Post
from django.shortcuts import render, get_object_or_404
from taggit.models import Tag
def post_list(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
return render(request, 'blog/post_list.html', {'posts': posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
return render(request, 'blog/post_detail.html', {'post': post})
def tag_detail(request, tag):
tag = get_object_or_404(Tag, tag=tag)
return render(request, 'blog/tag_detail.html', {'tag': tag})
urls.py(приложение)
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.post_list, name='post_list'),
url(r'^post/(?P<pk>[0-9]+)/$', views.post_detail, name='post_detail'),
url(r'^tag/(?P<tag>[-/w]+)/$', views.tag_detail, name='tag_detail'),
]
модели.py
from django.db import models
from django.utils import timezone
from taggit.managers import TaggableManager
class Post(models.Model):
author = models.ForeignKey('auth.User', on_delete=models.CASCADE)
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
published_date = models.DateTimeField(
blank=True, null=True)
tags = TaggableManager()
def ttags(self):
return [t.name for t in self.tags.all()]
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
class Tag(models.Model):
name = models.CharField(max_length=200)
def __unicode__(self):
return self.name
Я точно знаю, что я что-то упускаю (может быть, что-то простое), просто не могу понять, что это такое. Как я могу решить эту проблему? Спасибо за помощь заранее.