我想要一个模板标记,它可以获取对象的查询集,并使它们在当前模板的上下文中可用。从我所看到的情况可以通过simple_tag这样做:
@register.simple_tag(takes_context=True)
def get_myobject_queryset(context, string_arg)
myobjects = MyObject.objects.all()
context['myobjects'] = myobjects
return ''
这种方法有什么缺点,或者通常有更好的方法来达到我想要的效果吗?我只是因为这种感觉有点像我认为是一项非常普遍的任务。
答案 0 :(得分:2)
考虑编写上下文处理器。
#myapp/contexts.py
def get_myobject_queryset(request):
myobjects = MyObject.objects.all()
return {'myobjects': myobjects}
不要忘记在TEMPLATE_CONTEXT_PROCESSORS设置中添加处理器。
#settings.py
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.request",
"myapp.contexts.get_myobject_queryset",)
然后在模板中,您将能够访问您的变量,例如{{ myobjects }}
文档:https://docs.djangoproject.com/en/dev/ref/templates/api/#writing-your-own-context-processors
答案 1 :(得分:1)
您的标记很好,但您可以使用assignment_tag
装饰器。