通过模板标记将变量添加到当前上下文

时间:2013-11-07 16:33:52

标签: django django-templates

我想要一个模板标记,它可以获取对象的查询集,并使它们在当前模板的上下文中可用。从我所看到的情况可以通过simple_tag这样做:

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

这种方法有什么缺点,或者通常有更好的方法来达到我想要的效果吗?我只是因为这种感觉有点像我认为是一项非常普遍的任务。

2 个答案:

答案 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装饰器。