在Django中传递全局模板变量的正确方法是什么?
假设这是我们在每个页面中想要的,我们将创建“base\u template.html” 另一种方法是包装视图功能在Django中传递全局模板变量的正确方法是什么?,django,Django,假设这是我们在每个页面中想要的,我们将创建“base\u template.html” 另一种方法是包装视图功能 # urls.py ('^book_list/$', views.get_template(views.object_get_list),{'model': models.Book}), # views.py def get_template(view, **extrakw): def wrapview(request, **extrakw): templ
# urls.py
('^book_list/$', views.get_template(views.object_get_list),{'model': models.Book}),
# views.py
def get_template(view, **extrakw):
def wrapview(request, **extrakw):
template_dict = {'current_path': request.get_full_path(), 'domain': request.get_host()}
extrakw['template_dict'] = template_dict
return view(request, **extrakw)
return wrapview
def object_get_list(request, **kwargs):
model = kwargs.pop('model', None)
model_name = model.__name__.lower()
template_dict = kwargs.pop('template_dict', None)
template_dict[model_name] = model.objects.all()
template_dict['page_title'] = model_name +" list"
template_name = '%s.html' %(model_name)
return render_to_response(template_name, template_dict)
Pro:除了编辑htmls,现在修改只在一个视图中完成,而不是在每个视图中完成
缺点:丑陋的URLConf,可能还有错误提示
尝试3:
创建一个全局字典,就像我创建的模板一样
template_dict = {/..../}
def view1()
def view2() ...
问题:我无法使用request.path(或与request有关的任何内容)。这将返回到以前的尝试(包装器)
但一定有更简单的方法。在django站点中传递全局模板变量的正确方法是什么,这样每个视图函数现在就不需要gloabl模板变量了
感谢您抽出时间。使用上下文处理器 将函数名添加到
settings.py
中的TEMPLATE\u CONTEXT\u PROCESSORS
我使用的简单上下文处理器是:
def common_request_parameters(request):
return {'home_login_form': AuthenticationForm(request)}
非常感谢。:)知道了。
template_dict = {/..../}
def view1()
def view2() ...
def common_request_parameters(request):
return {'home_login_form': AuthenticationForm(request)}