2

我想要一个模板标签,它可以获取对象的查询集并使它们在当前模板的上下文中可用。据我所见,使用 simple_tag 可以做到这一点:

@register.simple_tag(takes_context=True)
def get_myobject_queryset(context, string_arg)
    myobjects = MyObject.objects.all()
    context['myobjects'] = myobjects
    return ''

这种方法是否有任何缺点,或者通常有更好的方法来实现我想要的?我问只是因为这感觉有点像解决我认为很常见的任务的方法。

4

2 回答 2

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

于 2013-11-07T16:42:43.203 回答
1

你的标签很好,但你可以使用assignment_tag装饰器。

于 2013-11-07T16:50:58.023 回答