Django RequestContext用法

模版中的变量由context中的值来替换,如果在多个页面模版中含有相同的变量,比如:每个页面都需要{{user}},笨办法就是在每个页面的请求视图中都把user放到context中。

Python代码  

  1. from django.temlate import loader,Context
  2. t = loader.get_template(‘xx.html‘)
  3. c = Context({‘user‘:‘zhangsan‘})
  4. return HttpResponse(t.render(c))   #httpresponse

也可以简写为:

Python代码  

  1. from django.short_cuts import render_to_response
  2. render_to_response(‘xxx.html‘,{‘user‘:‘zhangsan‘})

但是这样写不好的地方是就是造成代码的冗余,不易维护,此时就可以用Context的一个子类:django.template.RequestContext,在渲染模版的时候就不需要Context,转而使用RequestContext。RequestConntext需要接受request和processors参数,processors是context处理器的列表集合。

context处理器

Python代码  

  1. from django.template import RquestContext
  2. def custom_pros(request):   #context处理器
  3. return {‘age‘:22,‘user‘:request.user}

Python代码  

  1. #view 代码块
  2. c = RequestContext(request,{‘name‘:‘zhang‘},processors=[custom_pros])
  3. return HttpResponse(t.render(c))

这样在每个试图中只需把custom_pros传递给RequestContext的参数processors就行了。如果是render_to_response与RequestContext结合使用,那么render_to_response接收参数context_instance.

Python代码  

  1. render_to_response(‘xxx.html‘,{‘name‘:‘zhang‘},context_instance=RequestContext(request,processors[custom_pros])

但是这样还是很麻烦,代码的冗余并没有真正解决,你不得不在试图函数中明确指定context处理器,为此,Django提供了全局的context处理器。

全局context处理器

默认情况下,Django采用参数TEMPLATE_CONTEXT_PROCESSORS指定默认处理器,意味着只要是调用的RequestContext,那么默认处理器中返回的对象都就将存储在context中。

template_context_processors默认在settings文件中是没有的,而是设置在global_settings.py文件中,如果想加上自己的context处理器,就必须在自己的settings.py中显示的指出参数:TEMPLATE_CONTEXT_PROCESSORS

默认:

Python代码  

  1. TEMPLATE_CONTEXT_PROCESSORS = (
  2. ‘django.contrib.auth.context_processors.auth‘,#django1.4  or after
  3. ‘django.core.context_processors.auth‘,  #django1.4 before
  4. ‘django.core.context_processors.debug‘,
  5. ‘django.core.context_processors.i18n‘,
  6. ‘django.core.context_processors.media‘,
  7. ‘myapp.processor.foos‘,
  8. )

或者是:


Python代码  

  1. from django.conf import global_settings
  2. TEMPLATE_CONTEXT_PROCESSORS = global_settings.TEMPLATE_CONTEXT_PROCESSORS +("myapp.processor.foos",)
此时,在试图中只要把request参数传递给RquestContext就ok了。

Python代码  

  1. render_to_response(‘xxx.html‘,{‘age‘:33},context_instance=RequestContext(request))
系统在接受到该视图的请求时,自动执行处理器 “myapp.processor.foos",并把其返回值渲染到模版中。

参考:

http://stackoverflow.com/questions/7470179/module-django-core-context-processors-does-not-define-a-auth-callable-reques

http://stackoverflow.com/questions/2246725/django-template-context-processors

https://groups.google.com/forum/?fromgroups#!topic/django-users/1ntgBhfAulI

Django RequestContext用法

时间: 2024-10-10 08:04:51

Django RequestContext用法的相关文章

Django模板用法

django模板原理 # 创建template对象,由context对象传递template所需要的值, 有render方法进行模板的呈现 # 写模板,创建 Template 对象,创建 Context , 调用 render() 方法. # Python 字符串都有 upper() 和 isdigit() 方法,你在模板中调用 # 执行变量 {{ abc }} # 判断 {% if x > 0 %} {% else %} {% endif %} 例: {% if today_is_weeken

django ImageField用法

settings里的设置 PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname('__file__'))) MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'media') MEDIA_URL = '/media/' models里的设置 img = models.ImageField(upload_to='photo', null=True, blank=True) cateimg = model

用mako增强django模板,用法像jsp

用mako增强django模板 django默认的模板功能还可以,但是不能直接用python的语法,mako解决了这个痛点, 使得django的模板变得像jsp一样,可以直接使用python的语法做一些事情. mako django-mako demo mako基本用法 mako的模板需要这样子搞 直接的类似python string format的样子 from mako.template import Template mytemplate = Template("hello, ${name

Django入门笔记【三】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. Public interface - views. 1. 定义 视图(View)是Django应用中用于实现某一特定功能的Web页面.比如,一个博客可以有博客展示页面,博客创建页面,评论页面. 2. 视图示例 写入代码 1 #polls/views.py 2 3 from django.http

Django入门笔记【一】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 查看Django是否安装及版本 1 $ python -c "import django; print(django.get_version())" 2. 创建一个项目(project) 通过cd方式进入自创目录,然后运行: 1 $ django-admin startprojec

Django入门笔记【二】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 1. 创建管理员(admin user) 运行代码 1 $ python manage.py createsuperuser 2 3 Username: admin 4 Email address: [email protected] 5 6 Password: ********* 7 Passw

Django入门笔记【六】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. *静态文件(static files):images, JavaScript, CSS 1. 自定义应用外观(look and feel) 创建polls/static目录.Django的STATICFILES_FINDERS会寻找静态文件.在static目录下,创建polls/style.css

Django入门笔记【四】

入门笔记翻译整理自:https://docs.djangoproject.com/en/1.8/ *该笔记将使用一个关于投票网络应用(poll application)的例子来阐述Django的用法. 表单和通用视图(Forms&Generic Views) 1. 简单的表单 修改detail.html中的代码,使之含有<form>元素: 1 # polls/templates/polls/detail.html 2 3 <h1>{{ question.question_t

djongo:Django和MongoDB连接器

在Django项目中使用MongoDB作为后端数据库,且不改变Django的ORM框架.实现Django用户管理程序对MongoDB数据库中文件的增加和修改. 用法 1.pip install djongo 2.在Django项目下的setting.py中增加如下代码: DATABASES ={ 'default':{ 'ENGINE:'djongo', 'NAME':'your-db-name', } } 3.运行 manage.py makemigrations,之后运行 manage.py