Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django中传递全局模板变量的正确方法是什么?_Django - Fatal编程技术网

在Django中传递全局模板变量的正确方法是什么?

在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

假设这是我们在每个页面中想要的,我们将创建“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):
        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)}