tag page
settings.py |
INSTALLED_APPS = [ ‘taggit’, ] |
taggitを使うために、django-taggitをインストールする
そのあと、settings.pyが変わったのでマイグレートしておく
~/pj |
$pip install django-taggit==1.1.0$python manage.py migrate |
models.pyにtagsプロパティを追加する
blank=Trueとすることで、記事にタグを付けなくても良くなる
models.py |
from taggit.managers import TaggableManager class App(models.Model): tags = TaggableManager(blank=True) |
管理画面からタグを見れるようにする
admin.py |
@admin.register(App)class AppAdmin(admin.ModelAdmin): list_display = (‘id’, ‘title’, ‘tag_list’) list_display_links = (‘id’, ‘title’) def get_queryset(self, request): return super().get_queryset(request).prefetch_related(‘tags’) def tag_list(self, obj): return u”,”.join(o.name for o in obj.tags.all()) |
特定のタグに紐づいた記事一覧を取得する
views.py |
from taggit.models import Tagdef tag(request): tag = Tag.objects.get(name=”Python”) apps = App.objects.filter(tags=tag).order_by(‘-created_datetime’) return render(request, ‘app/tag.html’, {‘apps’:apps }) |
あとは、urls.pyとtag.htmlをつくるだけ
urls.py |
path(‘tag/Python’, views.tag, name=’tag’) |
tag.html |
{% extends ‘app/base.html’ %} {% for app in apps %} {{ app.title }}{% endfor %} |
参考URL: