context processor学习

学习nitrate的源码时,在它的template里面看到很多参数能够自动传入模板内,估计是context processor的效果,所以现在来整体学习一下context processor。
在百度上搜索了以下文章,先看一下:http://www.cnblogs.com/btchenguang/archive/2012/09/01/2666763.html

这篇讲的是template的高阶用法,里面就有提到context processor

文章第一节复习了template的用法,没有问题,这个懂,无法就是一些模板函数以及变量的引用,就像文中说的,view.py使用模板的时候,是需要创建类似字典的context对象用作传参,譬如代码里面的done、nowtime都是需要传参的。

复习一下模板语言的用法
{# 模板tag的用法 #}
{% if done %}
Over
{% else %}
wait
{% endif %}
{# 模板变量的用法 #}
Now is { { nowtime }}
在views.py中使用模板的时候:
1. 通过模板名,获得模板对象
2. 创建context对象,类似字典,用于像模板提供变量实际的值
3. 使用context对象进行模板的渲染,返回的是html网页的内容

文章然后介绍了使用requestcontext对上下文内容进行重用的方法,看了前面的介绍,对重用的概念不理解,继续往下看例子

使用RequestContext对上下文内容进行重用
当渲染一个模板的时候,我们通常使用的是django.template.Context的对象,
这里要介绍另外一个它的子类,django.template.RequestContext,
RequestContext提供了一种把不同的context内容中公共的部分提取出来的方法,
让context的内容重用。

例子1. Context版

from django.template import loader, Context
from django.http import HttpResponse

def view_1(request):
    t = loader.get_template('template1.html')
    c = Context({
        'app': 'My app',
        'user': request.user,
        'ip_address': request.META['REMOTE_ADDR'],
        'message': 'I am view 1.'
    })
    return HttpResponse(t.render(c))

def view_2(request):
    # ...
    t = loader.get_template('template2.html')
    c = Context({
        'app': 'My app',
        'user': request.user,
        'ip_address': request.META['REMOTE_ADDR'],
        'message': 'I am the second view.'
    })
    return HttpResponse(t.render(c))

这个例子能够理解,就是import context对象后,然后定义一个自己的context对象c,然后给c定义一些字典参数,如app、user、message等。然后文中最后一句话说两个view的context对象有些context内容是重复的,也就是说想将所有context内容打包放在一起,然后都传给template,你能用就用,不用也不用管,或者反过来,template在这个池子里面找要用的参数值。

例子2. 下面改写成RequestContext版

from django.template import loader, RequestContext
from django.http import HttpResponse

#使用context processro去提供一些context内容中公共的部分,也就是返回一个字典而已。
def custom_proc(request):
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值