kawaz.apps.stars.templatetags.stars_tags のソースコード

from django import template
from django.template import TemplateSyntaxError
from django.contrib.contenttypes.models import ContentType
from ..models import Star

register = template.Library()

@register.assignment_tag(takes_context=True)
[ドキュメント]def get_star_endpoint(context, object): """ 任意の<object>に対するStarのエンドポイントURLを取得し、指定された <variable>に格納するテンプレートタグ Syntax: {% get_star_endpoint <object> as <variable> %} Examples: あるオブジェクトに対するendpointを取得し、フォームを生成する {% get_star_endpoint object as endpoint %} <form action="{{ endpoint }}" method="POST"> <input type="submit"> </form> """ if not object: return "" from django.core.urlresolvers import reverse ct = ContentType.objects.get_for_model(object) # dataをdictで渡してしまうと、urllib.parse.urlencodeの # 並び順が保証されず毎回変わってしまう # そのため、あえてtupleで渡している data = ( ('content_type', ct.pk), ('object_id', object.pk) ) import urllib query = urllib.parse.urlencode(data) return '{}?{}'.format(reverse('star-list'), query)
@register.assignment_tag
[ドキュメント]def get_stars(object): """ 任意の<object>についた Star のクエリを取得し指定された <variable>に格納するテンプレートタグ Syntax: {% get_stars <object> as <variable> %} Examples: 公開された Star のクエリを取得し、最新5件のみを描画 {% get_stars object as stars %} {% for star in stars|slice:":5" %} {{ star }} {% endfor %} """ qs = Star.objects.get_for_object(object) qs = qs.prefetch_related('author', 'content_object') return qs