django-tagging
django 标签
安装
安装django-tagging
sudo pip install django-tagging
添加tagging到环境
在setting的INSTALLED_APPS中添加'tagging'APP
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
'tagging',
]
运行 manage.py makemigration
运行 manage.py migrate
运行工程
创建tags
在模型层创建tans,然后
from tagging.fields import TagField
tags = TagField()
我们在admin中添加tags
fieldsets = [
('basic content', {'fields': ['title', 'description', 'tags', 'content', 'status']}),
('banner', {'fields': ['header_image_url', 'header_image']}),
('category', {'fields': ['categories', ]}),
]
页面添加tag
博客详情页添加tags
在blog详情页我们看到了tags的内容,所以我们可以把此处进行修改
修改blog_single_rs.html页面
<ul>
<li><i class="fa fa-tags"></i> <a href="#">tags: </a></li>
<li><a href="#">{{article.tags}}</a></li>
</ul>
列表页面的tags过滤
在列表页添加tags标签,需要两个步骤。首先在view中查询出所有的tags标签,封装到context中。然后再在Template页面中显示相应的内容。
在列表页首先需要显示所有的tags
def index(request):
articles = Article.objects.order_by('-updatedAt')
# articles = Article.objects.filter(deletedAt=None).filter(status=2).order_by('-updatedAt')
categories = Category.objects.filter(deletedAt=None)
tags = Tag.objects.all()
context = {
'articles': articles,
'categories': categories,
'tags': tags,
}
return render(request, 'blog/blog_image_rs.html', context)
在Template中添加所有的tags
<aside class="widget widget_tag_cloud">
<h4 class="widget-title">Search by Tags</h4>
{% for tag in tags%}
<a href="#" class="ed_btn ed_orange">{{tag.name}}</a>
{% endfor %}
</aside>
为tags添加导航
需求:点击tags的按钮的时候,需要展示该Tags下面的所有文章。
建立根据tag来索引文章的view。
为根据tag索引文章的view添加urlpattern。
在列表页添加相应的tag导航。
修改views.py
from tagging.models import Tag
def tag_category(request, tag_name):
articles = Article.objects.filter(tags=tag_name).filter(deletedAt=None).filter(status=2).order_by(
'-updatedAt')
categories = Category.objects.filter(deletedAt=None)
tags = Tag.objects.all()
context = {
'articles': articles,
'categories': categories,
'tags': tags,
}
return render(request, 'blog/blog_image_rs.html', context)
修改urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('<int:article_id>/', views.blog_single, name='detail'),
path('<slug:slug>/', views.blog_slug_single, name='detail_slug'),
path('tag/<str:tag_name>/', views.tag_category, name='tag_category')
path('category/<int:category_id>/', views.category, name='category'),
]
修改blog_image_rs:
<aside class="widget widget_tag_cloud">
<h4 class="widget-title">Search by Tags</h4>
{% for tag in tags%}
<a href="/blog/tag/{{tag.name}}" class="ed_btn ed_orange">{{tag.name}}</a>
{% endfor %}
</aside>
详情请参考django参考文档
Last updated
Was this helpful?