我有一个函数在我的views.py
文件中获取一些基本信息,并且我试图通过让它返回字典来更新每个页面的上下文。但是,在.update()
函数的上下文字典中使用render()
似乎无效。
这就是我正在做的事情:
def getBaseInfo():
allPages = list(Page.objects.all())
primaryPages = allPages[:5]
secondaryPages = allPages[5:]
return {'p':primaryPages, 'p2':secondaryPages}
def index(request):
return render(request, 'pages/index.html', {}.update(getBaseInfo()))
但是,没有任何内容发送到我的模板。提前谢谢!
编辑:我使用的是Python 2.7.11
答案 0 :(得分:2)
首先,如果你想使用基础字典并添加对象,你应该明确地这样做:
def index(request):
context = getBaseInfo()
context.update({'otherkey': 'othervalue'})
# or
context['otherkey'] = 'othervalue'
return(...)
但是,根本不需要这样做。 Django已经为您提供了一种自动提供共享上下文的方法,这是context processor。
事实上,您的getBaseInfo()
函数已经几乎是一个上下文处理器 - 它只需要接受request
参数 - 所以您只需要将它添加到{{ 1}}在您的模板设置中列出。然后所有模板将自动从该函数中获取值。
答案 1 :(得分:1)
你应该这样做:
def index(request):
allPages = list(Page.objects.all())
primaryPages = allPages[:5]
secondaryPages = allPages[5:]
return render(request, 'pages/index.html', {'p':primaryPages, 'p2':secondaryPages})
其他选项应该是getBaseInfo
为@property
以实现可重用性和干燥目的,或者使基于视图类的模板视图并将可重用代码定义为mixin。我更喜欢后者,但这完全取决于个人选择。