带有 Django 标签的标签详细信息页面
Tag detail page with Django-taggit
我正在尝试为我的 Django 博客上的标签创建页面。我已经有一个简单的索引页面,它显示了所有使用过的标签的列表,现在我想为每个标签创建单独的页面,并且在该页面上我将显示所有标有该标签的 post。这些标签详细信息页面的 url 结构将像这样
localhost/tag/my-tag-here
我已经安装了 django-taggit 并添加了一些标签,它们在 post 详细信息页面和上面提到的标签索引页面上显示正常,但是当我尝试访问每个标签详细信息时我得到了 404页面如 /tag/test。
这些是我的文件和下面的完整错误消息。
views.py
def tag_detail(request, tag):
tag = get_object_or_404(Tag, tag=tag.name)
return render(request, 'blog/tags_detail.html', {'tag': tag})
urls.py(应用程序)
urlpatterns = [
url(r'^$', views.blog_index, name='blog_index'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/$',
views.blog_post_detail,
name='blog_post_detail'),
url(r'^contact/$', views.contact_form, name='contact_form'),
url(r'^thanks/$', views.thanks_view, name='thanks_view' ),
url(r'^about/$', views.about, name='about'),
url(r'^upload/$', views.upload_image, name='upload_image'),
url(r'^tag/(?P<tag>[-/w]+)/$', views.tag_detail, name='tag_detail'),
url(r'^tags/$', views.tags_index, name='tags_index')
]
这是完整的错误信息
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/tag/test
问题出在我看来还是url结构上?对于视图,我不是 100% 确定这是否是正确的方法,但我已经尝试按照我的 post 详细视图来做。
谢谢
问题出在您的 views.py 文件中。
在这段代码中:
def tag_detail(request, tag):
tag = get_object_or_404(Tag, tag=tag.name)
return render(request, 'blog/tags_detail.html', {'tag': tag})
你在这里写道:
tag = get_object_or_404(Tag, tag=tag.name)
您在 URL 中传递了一个标签,因此正确的方法是:
tag = get_object_or_404(Tag, tag=tag)
但这只有在您的模型中将标签名称返回为 Unicode 时才有效,就像这样:
class Tag(models.Model):
name = models.CharField()
def __unicode__(self):
return unicode(self.name)
如果这仍然不起作用,则 settings.py 文件中的 TEPLATE_DIR 设置可能有问题。然后你必须分享项目文件结构的settings.py代码。
我正在尝试为我的 Django 博客上的标签创建页面。我已经有一个简单的索引页面,它显示了所有使用过的标签的列表,现在我想为每个标签创建单独的页面,并且在该页面上我将显示所有标有该标签的 post。这些标签详细信息页面的 url 结构将像这样
localhost/tag/my-tag-here
我已经安装了 django-taggit 并添加了一些标签,它们在 post 详细信息页面和上面提到的标签索引页面上显示正常,但是当我尝试访问每个标签详细信息时我得到了 404页面如 /tag/test。
这些是我的文件和下面的完整错误消息。
views.py
def tag_detail(request, tag):
tag = get_object_or_404(Tag, tag=tag.name)
return render(request, 'blog/tags_detail.html', {'tag': tag})
urls.py(应用程序)
urlpatterns = [
url(r'^$', views.blog_index, name='blog_index'),
url(r'^(?P<year>\d{4})/(?P<month>\d{2})/(?P<day>\d{2})/'\
r'(?P<post>[-\w]+)/$',
views.blog_post_detail,
name='blog_post_detail'),
url(r'^contact/$', views.contact_form, name='contact_form'),
url(r'^thanks/$', views.thanks_view, name='thanks_view' ),
url(r'^about/$', views.about, name='about'),
url(r'^upload/$', views.upload_image, name='upload_image'),
url(r'^tag/(?P<tag>[-/w]+)/$', views.tag_detail, name='tag_detail'),
url(r'^tags/$', views.tags_index, name='tags_index')
]
这是完整的错误信息
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/tag/test
问题出在我看来还是url结构上?对于视图,我不是 100% 确定这是否是正确的方法,但我已经尝试按照我的 post 详细视图来做。
谢谢
问题出在您的 views.py 文件中。 在这段代码中:
def tag_detail(request, tag):
tag = get_object_or_404(Tag, tag=tag.name)
return render(request, 'blog/tags_detail.html', {'tag': tag})
你在这里写道:
tag = get_object_or_404(Tag, tag=tag.name)
您在 URL 中传递了一个标签,因此正确的方法是:
tag = get_object_or_404(Tag, tag=tag)
但这只有在您的模型中将标签名称返回为 Unicode 时才有效,就像这样:
class Tag(models.Model):
name = models.CharField()
def __unicode__(self):
return unicode(self.name)
如果这仍然不起作用,则 settings.py 文件中的 TEPLATE_DIR 设置可能有问题。然后你必须分享项目文件结构的settings.py代码。