用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


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM