私はdjangoでブログを書いていますが、ブログエントリの下部に、django-taggitを使用して付けたタグに関連する最新の5つのエントリを表示したいと思います。
そのため、現在のブログエントリ(表示しているもの)を、同じtaggit-tagsを持つエントリを取得する、または十分に近いtemplatetagに渡す必要があると考えました。しかし、簡単に始めて、最初のtaggit-tagを共有するエントリを取得するとしましょう。
これは私が思いついたものです:
from django.template import Library, Node
from django import template
from blog.models import Entry
register = Library()
class RecentContentNode(Node):
def __init__(self, num, object, varname):
self.object = template.Variable(object)
self.num, self.varname = num, varname
def render(self, context):
object = self.object.resolve(context)
tag_list = object.tags.all()
tag_names = tag_list[0].name
context[self.varname] = Entry.objects.filter(tags__name__in=[tag_names])[:self.num]
return ''
@register.tag
def get_recent_related(parser, token):
bits = token.contents.split()
if len(bits) != 5:
raise TemplateSyntaxError, "get_latest_entries tag takes exactly four arguments"
if bits[3] != 'as':
raise TemplateSyntaxError, "fourth argument to the get_recent tag must be 'as'"
return RecentContentNode(bits[1], bits[2], bits[4])
しかし、それは何もしません。printステートメントを使用してステップスルーすると、initを介してRecentContentNodeに到達しますが、renderメソッドには到達しないことがわかります。エラーや警告が表示されないので、どうなるかわかりません。しかし、ネット全体で同様の問題を抱えている他の人々を見るので、問題は変数/解決だと思いますが、彼らはしばしばそれを修正したと言って投稿に応答しますが、方法ではないので、賢明ではありません。
私が見逃した明らかな何か?またはもっと良い方法がありますか..