tag page

Python
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:

https://djangobrothers.com/blogs/django_tag_related_blog_taggit
BACK