用jinja2替换Django的模板

本文详细介绍了Django项目中模板的加载顺序及其配置方法,并通过示例展示了如何使用jinja2模板引擎与Django框架结合。

整个项目的文件结构如下:

 ~/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。

 

首先,Django的模板查找顺序在项目的settings.py定义:

 TEMPLATE_LOADERS = ( 

    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

以上设置表明先从文件目录找,如果找不到就从每个application下的templates文件夹下找。

而文件目录又是如下定义:

 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代码如下:

from django.http import HttpResponse
from django.conf import settings
from jinja2 import Environment, PackageLoader, FileSystemLoader, ChoiceLoader
from Django.jobs.models import Job
def 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


 

 

转载于:https://www.cnblogs.com/children/archive/2013/04/16/3023733.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值