使Django Context中的自定义变量永久化

时间:2014-06-23 13:03:49

标签: python django django-templates

我正在创建一个拥有"类别"作为Django的模特。为了生成侧边栏,我迭代类别并为每个类别创建一个链接,这使我可以使其成为动态。

问题在于,使用当前的方法,我必须将Categories.objects.all()作为变量放在每个视图的上下文中,并且我确定这不是正确的方法。如何将categories设置为任何未来View的上下文变量?

2 个答案:

答案 0 :(得分:4)

方法是写context processor,你只需要定义一个返回这样的上下文的函数:

def get_my_cool_context(request):
    return {}

然后在所有视图中返回您想要使用的所有变量,然后在您的所有视图中都可以获得这样的上下文

context = get_my_cool_context(request)

答案 1 :(得分:1)

创建一个上下文处理器,如:

def categories(request):   #written in some file named processor.py
    return {'categories': Categories.objects.all()}

然后添加此上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS = (
    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "myapp.processor.categories",         #you have added this line to settings
)

现在你可以将foo用作任何模板作为上下文变量。 http://catherinetenajeros.blogspot.com/2013/03/custom-template-context-processors.html