kawaz.apps.blogs.templatetags.blogs_tags のソースコード

from django import template
from django.template import TemplateSyntaxError
from ..models import Entry, Category

register = template.Library()


@register.assignment_tag(takes_context=True)
[ドキュメント]def get_entries(context, lookup='published'): """ 任意の<lookup>によりフィルタされた Entry のクエリを取得し指定された <variable>に格納するテンプレートタグ Syntax: {% get_entries as <variable> %} {% get_entries <lookup> as <variable> %} Lookup: (Default: published) published: ユーザーに対して公開された Entry を返す draft: ユーザーが編集可能な下書き Entry を返す Examples: 公開された Entry のクエリを取得し、最新5件のみを描画 {% get_entries as entries %} {% for entry in entries|slice:":5" %} {{ entry }} {% endfor %} 下書き記事を取得 {% get_entries 'draft' as draft_entries %} """ ALLOWED_LOOKUPS = ('published', 'draft') if lookup not in ALLOWED_LOOKUPS: raise TemplateSyntaxError( "Unknown 'lookup' is specified to 'get_entries'. " "It need to be one of {}.".format(ALLOWED_LOOKUPS)) # 'request' は settings.TEMPLATE_CONTEXT_PROCESSOR に # 'django.core.context_processors.request' が指定されていないと存在しない # ここでは敢えて存在しない場合にエラーを出すため直接参照している request = context['request'] if lookup == 'published': qs = Entry.objects.published(request.user) elif lookup == 'draft': qs = Entry.objects.draft(request.user) return qs
@register.assignment_tag(takes_context=True)
[ドキュメント]def get_published_entries_of(context, author): """ あるユーザーの書いたpublishedなエントリーを返します Syntax: {% get_published_entries_of <user> as <variable> %} """ qs = get_entries(context) return qs.filter(author=author)
@register.assignment_tag
[ドキュメント]def get_categories(author=None): """ ブログ記事カテゴリ一覧を取り出します <user>を渡した場合は、そのユーザーが持っているカテゴリのみを取り出します Syntax: {% get_categories as categories %} {% get_categories <user> as categories %} """ qs = Category.objects.all() if author: qs = qs.filter(author__pk=author.pk) return qs