kawaz.apps.events.templatetags.events_tags のソースコード

from django import template
from django.template import TemplateSyntaxError
from django.core.urlresolvers import reverse
from ..models import Event

register = template.Library()


@register.assignment_tag(takes_context=True)
[ドキュメント]def get_events(context, lookup='published'): """ 任意の<lookup>によりフィルタされた Event のクエリを取得し指定された <variable>に格納するテンプレートタグ Syntax: {% get_events as <variable> %} {% get_events <lookup> as <variable> %} Lookup: (Default: published) published: ユーザーに対して公開された Event を返す draft: ユーザーが編集可能な下書き Event を返す active: ユーザーが閲覧可能な非終了 Event を返す attendable: ユーザーが参加可能な Event を返す Examples: 公開された Event のクエリを取得し、最新5件のみを描画 {% get_events as events %} {% for event in events|slice:":5" %} {{ event }} {% endfor %} 下書き記事を取得 {% get_events 'draft' as draft_events %} """ ALLOWED_LOOKUPS = ('published', 'draft', 'active', 'attendable') if lookup not in ALLOWED_LOOKUPS: raise TemplateSyntaxError( "Unknown 'lookup' is specified to 'get_events'. " "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 = Event.objects.published(request.user) elif lookup == 'draft': qs = Event.objects.draft(request.user) elif lookup == 'active': qs = Event.objects.active(request.user) elif lookup == 'attendable': qs = Event.objects.attendable(request.user) return qs
[ドキュメント]class Archive: def __init__(self, date, object_list, count, url): self.date = date self.object_list = object_list self.count = count self.url = url
@register.assignment_tag(takes_context=True)
[ドキュメント]def get_monthly_archives(context): """ Eventの月間アーカイブを取得する Usage: get_monthly_archive as <variable> <variable> には `Archive` の各インスタンスがリストとして保存される。 また `Archive` は下記に上げるアトリビュートを持っている - date (Date): アーカイブ対象のDateオブジェクト - object_list (QuerySet): アーカイブ対象のEventsを格納したQuerySet - count (int): アーカイブ対象のイベント数 - url (str): アーカイブのURL したがって下記のようにアーカイブリストを描画できる {% get_monthly_archives as archives %} {% for archive in archives %} <p><a href="{{ archive.url }}"> {{ archive.date }}({{ archive.count }}) </a></p> {% endfor %} """ qs = Event.objects.all() date_list = qs.datetimes('period_start', 'month', order='DESC') archives = [] for date in date_list: object_list = qs.filter(**{ 'period_start__year': date.year }).filter(**{ 'period_start__month': date.month }) url = reverse('events_event_archive_month', kwargs={ 'year': date.year, 'month': date.month, }) archives.append(Archive(date=date, object_list=object_list, count=object_list.count(), url=url, )) return archives