带有标签的 Django 标签详细信息页面
Django tag detail page with taggit
我有一个非常类似的问题 。长话短说,我有一个 django 博客,对于标签,我使用的是 django-taggit,它在管理页面上运行良好。
AdminScreen
我的主要问题是,如果我想通过 url 地址过滤到标签,我仍然会收到 404 错误,尽管我修改了文档和几个 Whosebug post:
Page not found (404) Request Method: GET Request
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(应用程序)
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 文档 field lookup section nor in the taggit documentation.
中没有找到任何相关信息
在我忘记标签结果页的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 %}
如果有人知道为什么以及如何工作,请告诉我。
我有一个非常类似的问题
AdminScreen
我的主要问题是,如果我想通过 url 地址过滤到标签,我仍然会收到 404 错误,尽管我修改了文档和几个 Whosebug post:
Page not found (404) Request Method: GET Request 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(应用程序)
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 文档 field lookup section nor in the taggit documentation.
在我忘记标签结果页的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 %}
如果有人知道为什么以及如何工作,请告诉我。