ipe*_*sus 53 python django django-nonrel
我想知道如何将变量传递给我的所有模板,而不是在我的views.py文件中的每个方法上重复相同的代码?
在下面的示例中,我想为Web应用程序中的所有模板提供类别(类别对象数组).
Eg: I would like to avoid writing 'categories':categories on every method. Is it possible?
Run Code Online (Sandbox Code Playgroud)
一种观点方法
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))
Run Code Online (Sandbox Code Playgroud)
另一种观点方法
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))
Run Code Online (Sandbox Code Playgroud)
Vic*_*res 97
你想要的是一个上下文处理器,它很容易创建一个.假设您有一个名为的应用custom_app,请按照以下步骤操作:
custom_app到 INSTALLED_APPS在settings.py(你已经做了了,对不对?);context_processors.pyinto custom_app文件夹;将以下代码添加到该新文件:
def categories_processor(request):
categories = Category.objects.all()
return {'categories': categories}
Run Code Online (Sandbox Code Playgroud)加入context_processors.py到TEMPLATE_CONTEXT_PROCESSORS在settings.py
TEMPLATE_CONTEXT_PROCESSORS += ("custom_app.context_processors.categories_processor", )
Run Code Online (Sandbox Code Playgroud)现在您可以{{categories}}在所有模板中使用:D
截至Django 1.8
要添加a TEMPLATE_CONTEXT_PROCESSORS,在设置中必须添加下一个代码:
TEMPLATES[0]['OPTIONS']['context_processors'].append("custom_app.context_processors.categories_processor")
Run Code Online (Sandbox Code Playgroud)
或者直接在设置中的OPTIONS.context_processors键中包含该字符串TEMPLATES.