用jinja2替换Django的模板
2013-04-16 11:40
288 查看
整个项目的文件结构如下:
首先,Django的模板查找顺序在项目的settings.py定义:
而文件目录又是如下定义:
~/hg_repo/Django/Django$ tree
.├── index.py├── __init__.py├── jobs│ ├── __init__.py│ ├── models.py│ ├── templates│ │ ├── __init__.py│ │ ├── job_base.html│ │ └── job_list.html│ ├── tests.py│ ├── urls.py│ ├── views.py├── settings.py├── templates│ ├── base.html│ └── index.html├── urls.py└── wsgi.py
jobs是一个application,index.py是首页入口,项目下的templates目录放全局template,包括首页index.html及公共模板base.html。.├── index.py├── __init__.py├── jobs│ ├── __init__.py│ ├── models.py│ ├── templates│ │ ├── __init__.py│ │ ├── job_base.html│ │ └── job_list.html│ ├── tests.py│ ├── urls.py│ ├── views.py├── settings.py├── templates│ ├── base.html│ └── index.html├── urls.py└── wsgi.py
首先,Django的模板查找顺序在项目的settings.py定义:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader',# 'django.template.loaders.eggs.Loader',)
以上设置表明先从文件目录找,如果找不到就从每个application下的templates文件夹下找。'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader',# 'django.template.loaders.eggs.Loader',)
而文件目录又是如下定义:
TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/home/andrew/hg_repo/Django/Django/templates',)
jobs中使用jinja2的模板,views.py代码如下:# Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
'/home/andrew/hg_repo/Django/Django/templates',)
from django.http import HttpResponsefrom django.conf import settingsfrom jinja2 import Environment, PackageLoader, FileSystemLoader, ChoiceLoaderfrom Django.jobs.models import Jobdef job_list(request): loader = ChoiceLoader([ FileSystemLoader(settings.TEMPLATE_DIRS), PackageLoader('Django.jobs', 'templates') ]) env = Environment(loader=loader) template = env.get_template('job_list.html') object_list = Job.objects.all() return HttpResponse( template.render(object_list=object_list) )
ChoiceLoader根据顺序找模板,原理和Django的TEMPLATE_LOADERS类似,加FileSystemLoader(settings.TEMPLATE_DIRS)的目的是为了找到项目的templates
相关文章推荐
- Django1.10配置Jinja2模板(20161130更新)
- DJango内建模板转向jinja2的小脚本
- 更换Django默认的模板引擎为jinja2的实现方法
- Django-Jinja2替换默认模版引擎
- 解决Django换用jinja2模板引擎后admin提示“TemplateDoesNotExist”
- 千与千寻django(三)---django的模板系统
- tp3.2.3模板替换__MODULE__
- Django模板用法
- django 开发 - 小心模板文件的编码格式(utf-8)
- 模板替换IMG正则
- django 模板html自动转义符号和处理字符串在序列中自动加u
- Django将request对象传入模板配置
- Django学习笔记(4):Django模板系统(上)
- django中的模板文件加载顺序
- django学习笔记---模板语言继承和simple_tag
- 因为公司的产品用asp开发, 前一段时间用asp写了一个生成静态页面并分页的程序,但缘于对.net的热爱,写了这个.net下的生成静态页面并分页的程序。 主要的原理就是替换模板里的特殊字符。
- Django1.4关于静态文件(css.js等)和模板路径的配置
- django 简易博客开发 2 模板和数据查询
- django学习——模板中判断相等与否的两种用法ifequal与if
- Django模板中常用过滤器(filter)