gpt4 book ai didi

python - django templatetag,获取与当前帖子的 taggit-tags 相关的帖子

转载 作者:行者123 更新时间:2023-12-01 06:08:21 25 4
gpt4 key购买 nike

我正在使用 django 编写博客,并且在博客条目的底部我想显示与我使用 django-taggit 附加的标签相关的 5 个最新条目。

所以我想我需要将当前博客条目(我们正在查看的博客条目)传递给模板标签,该模板标签将检索具有相同 taggit 标签或足够接近的条目。但让我们从简单的开始,假设检索共享第一个 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 到达 最近内容节点,但没有进入 render 方法。我没有收到任何错误或警告,所以我不知道会发生什么。但我认为这是变量/解决问题,因为我看到网上的其他人也有类似的问题,但他们经常回复帖子说他们修复了它,但没有说明如何修复,所以我不知道。

我错过了什么明显的事情?或者有更好的方法..

最佳答案

您可以直接在上下文中传递列表。如果您使用基于类的通用 View ,请传递

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

https://docs.djangoproject.com/en/dev/topics/class-based-views/#adding-extra-context

您应该仅在真正需要的 View 中添加此内容,并根据您需要显示的内容进行定制,而不是盲目地将其添加到任何 View 的上下文中,无论 View 是什么。

关于python - django templatetag,获取与当前帖子的 taggit-tags 相关的帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032503/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com