Python django templatetag,获取与当前帖子相关的帖子';s taggit标签
我正在用django写一个博客,在博客条目的底部,我想显示我使用django taggit附加的标签的5个最新条目 所以我想我需要将当前的博客条目(我们正在查看的那个)传递给一个templatetag,该templatetag将检索具有相同taggit标签的条目,或者足够接近。但是让我们从简单的开始,比如说检索共享第一个taggit标记的条目 这就是我想到的:Python django templatetag,获取与当前帖子相关的帖子';s taggit标签,python,django,django-templates,django-taggit,Python,Django,Django Templates,Django Taggit,我正在用django写一个博客,在博客条目的底部,我想显示我使用django taggit附加的标签的5个最新条目 所以我想我需要将当前的博客条目(我们正在查看的那个)传递给一个templatetag,该templatetag将检索具有相同taggit标签的条目,或者足够接近。但是让我们从简单的开始,比如说检索共享第一个taggit标记的条目 这就是我想到的: from django.template import Library, Node from django import templat
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方法。我没有收到错误或警告,所以我不知道会发生什么。但我认为问题出在变量/解决上,因为我在网上看到其他人也有类似的问题,但他们经常回复帖子说他们解决了,但不是怎么解决的,所以我并不聪明
我错过了什么?或者有更好的方法吗?您可以直接在上下文中传递列表。如果您使用的是基于类的泛型视图,请传递
def get_context_data(self, **kwargs):
context_data = super(EntryView, self).get_context_data(**kwargs)
related_entries = Entry.objects.filter(
tags__name__in=list(self.object.tags.values_list('name', flat=True))
).exclude(id=self.object.id)
context_data['related_entries'] = related_entries
return context_data
你应该只在你真正需要的视图中添加它,并根据你需要显示的内容进行调整,而不是盲目地将它添加到任何视图的上下文中,不管视图是什么。效果很好,但是告诉我为什么要小心使用这种方法?有安全风险吗?还是会增加太多额外的数据库查询/开销?关键是开销。如果您可以根据一些上下文信息选择是否包含相关的_条目,则需要保存一个或两个查询。