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


  • 相关阅读:
    [C++11新特性] weak_ptr和unique_ptr
    [C++11新特性] shared_ptr共享的智能指针
    VS2019 Qt5.15.2 开发环境搭建
    【C++11 新特性】Lambda表达式(三)
    【C++11 新特性】bind(二)
    【C++11 新特性】function(一)
    【IPC 进程间通信】有名管道的简单实现
    【IPC 进程间通信】常用进程间通信方式总结
    Qt 文件常见操作管理类
    【GitHub 开源分享】QML 在线预览工具
  • 原文地址:https://www.cnblogs.com/children/p/3023733.html
Copyright © 2020-2023  润新知