我们在做一些网站项目的时候,可能会遇到需要把某个全局变量注入到所有页面的情况,比如我们做一个在线商城,那么可能需要将用户的资料:比如用户的账号、用户的姓名等注入到每个页面里面。

    但是如果用常规的方法,也就是在每个views方法中通过render_to_response方法注入用户数据的话,这样就会做非常多的重复工作,就像下面这样:

def views_meth1(request):    
    return render_to_response('template_1.html', {'user': request.user}) 
def views_meth2(request):    
    return render_to_response('template_2.html', {'user': request.user}) 
def views_meth3(request):    
    return render_to_response('template_3.html', {'user': request.user}) 
# ...剩下的N个方法

    这在需要传入的变量比较简单、数量较少的时候还行,一旦需要注入的变量多一些,或是需要经过一些额外的计算才能生成的时候,那就麻烦大了。所以如何避免这种repeat yourself的2B模式呢?我们可以选择如下的一种模式:

 

    在每次创建新的django项目的时候,一般来说我们都会在根目录中创建一个类似名为utils.py的工具module,在这个module中,我们可以通过定义一个自己的render方法,来为每次模板的渲染注入指定的全局变量:

# in utils.py:
def mp_render(request, template, context={}):
    context['user'] = request.user     
    return render_to_response(template, context) 
# in views.py:from utils import mp_render
def views_meth1(request):    
    return mp_render(request, 'template_1.html') 
def views_meth2(request):    
    return mp_render(request, 'template_2.html') 
def views_meth3(request):    
    return mp_render(request, 'template_3.html')