私はdjangoでブログを書いています。ブログのエントリの最下部には、django-taggit 。django templatetag、現在の投稿のtaggit-tagsに関連する投稿を取得します
私は現在のブログエントリ(私たちが見ているもの)をtemplatetagに渡して、同じtaggitタグを持つエントリを取得するか、または十分に近いものにする必要があると考えました。しかし、簡単に始めて、最初のtaggitタグを共有するエントリを取得するようにしてください。
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メソッドを通して、しかしrenderメソッドにではなく、RecentContentNodeに到達するのを見ることができます。私はエラーや警告を受けないので、何が起こるかわからない。しかし、私はそれが変数/解決策だと思うので、私は他の人々と同様の問題を抱えているネットを参照してください、しかし、彼らはしばしば、
明らかに私は見逃しましたか?またはより良い方法があります。
あなたは正しいです。私は訂正した。 – rewritten
完全に動作しますが、この方法を使用するにはどうすればよいのですか?セキュリティリスクはありますか?それともあまりにも多くの余分なデータベースクエリ/オーバーヘッドを追加しますか? – mXed
ポイントはオーバーヘッドです。コンテキスト情報に基づいてrelated_entriesを含めるかどうかを選択できる場合は、1つまたは2つのクエリを保存します。 – rewritten