• 用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


  • 相关阅读:
    Azure DevOps Server 2020.1 新增功能 (TFS)
    Azure DevOps Server 2020.1 升级指南 (TFS)
    Azure DevOps Server:如何在Git历史记录中显示中文姓名
    Azure DevOps Server:集中显示所有团队的燃尽图
    MS中adjust hydrogen功能不能使用的问题
    bat对拍
    CSP 201812-4 数据中心(最小瓶颈生成树)
    CSP 202009
    CSP 202012
    牛客练习赛76
  • 原文地址:https://www.cnblogs.com/children/p/3023733.html
Copyright © 2020-2023  润新知