繁体   English   中英

带有taggit的Django标签详细信息页面

[英]Django tag detail page with taggit

我有一个类似这篇文章的问题。 长话短说,我有一个django博客,对于标签,我使用的是django-taggit,在管理页面上运行良好。

管理员画面

我的主要问题是,如果我希望通过URL地址过滤到标签,尽管我将文档和一些stackoverflow帖子都弄成了红色,但仍然会收到404错误:

找不到页面(404)请求方法:GET请求URL: http : //127.0.0.1 : 8080/tag/sample/

views.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(app)

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'),
]

models.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

我肯定知道我错过了某些东西(也许很简单),只是无法弄清楚它是什么。 如何解决此问题? 预先感谢您的帮助。

我设法解决了taggit标记问题,尽管它看起来更像文档或其他基于解决方案的外观。

models.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 publish(self):
        self.published_date = timezone.now()
        self.save()

    def __str__(self):
        return self.title

ursl.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'),
]

直到那时,这都是不言自明的。

views.py

from django.utils import timezone
from .models import Post
from django.shortcuts import render, get_object_or_404


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):
    posts = Post.objects.filter(tags__slug=tag)
    return render(request, 'blog/tag_detail.html', {"posts": posts, "tag": tag})

因此,在tag_detail def中,我正在使用过滤tags__slug=tag 关于此问题,我唯一的主要问题(尽管它工作正常)比我凭运气找到此解决方案要好得多,但是在django文档字段查找部分或taggit文档中都没有找到任何有关此问题的信息

在我忘记标记结果页面的html文件之前:

{% extends 'blog/base.html' %}
{% block content %}
<h2>Posts tagged: {{tag}}</h2>
{% for post in posts %}
<p>{{ post.published_date }}: <a href="{% url 'post_detail' pk=post.pk %}">{{ post.title }}</a></p>
{% endfor %}
{% endblock %}    

如果有人知道为什么以及如何工作,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM