Django-如何使变量可用于所有模板?
我想知道如何将变量传递给我的所有模板,而无需在views.py文件中的每个方法上重复相同的代码?
在下面的示例中,我想使类别(类别对象的数组)可用于Web应用程序中的所有模板。
Eg: I would like to avoid writing 'categories':categories on every method. Is it possible?
一种查看方法
def front_page(request): categories = Category.objects.all()
if is_logged_in(request) is False:
return render_to_response('users/signup.html', {'is_logged_in': is_logged_in(request), 'categories':categories}, context_instance=RequestContext(request))
else:
return render_to_response('users/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))
另一种查看方法
def another_view_method(request): categories = Category.objects.all()
return render_to_response('eg/front_page.html', {'is_logged_in': is_logged_in(request), 'categories':categories},context_instance=RequestContext(request))
回答:
你需要的是上下文处理器,创建一个上下文处理器非常容易。假设你有一个名为的应用custom_app,请执行以下步骤:
- 加入
custom_app
到INSTALLED_APPS
在settings.py
(你已经做了了,对不对?); - 创建一个
context_processors.pyinto custom_app
文件夹; - 将以下代码添加到该新文件中:
def categories_processor(request): categories = Category.objects.all()
return {'categories': categories}
加入context_processors.py
到TEMPLATE_CONTEXT_PROCESSORS
在settings.py
TEMPLATE_CONTEXT_PROCESSORS += ("custom_app.context_processors.categories_processor", )
现在你可以{{categories}}
在所有模板中使用:D
从Django 1.8开始
要TEMPLATE_CONTEXT_PROCESSORS
在设置中添加,你必须添加以下代码:
TEMPLATES[0]['OPTIONS']['context_processors'].append("custom_app.context_processors.categories_processor")
或直接在设置的OPTIONS.context_processors
键中包含该字符串TEMPLATES。
以上是 Django-如何使变量可用于所有模板? 的全部内容, 来源链接: utcz.com/qa/409285.html