设为首页 加入收藏

TOP

django-模板初探(三)
2017-09-30 16:44:47 】 浏览:2548
Tags:django- 模板 初探
il.html
 ('django' engine)
  • /home/html/default/story_detail.html ('django' engine)
  • /home/html/jinja2/story_detail.html ('jinja2' engine)
  •   会先用第一个引擎,然后再使用第二个引擎的配置进行搜索,当找到第一个符合的文件时,就会停止搜索,也就是后面也有同名的文件的话,将会‘失明’。

      另外,我们可以使用包括路径的名称,django也推荐这样做,最好的方法就是为每一个app建立一个同名的目录,然后在该目录下放置这个app要用到的模板,这样可以避免重名问题带来的模板查找错误,例如: get_template('news/story_detail.html') 

    • /home/html/example.com/news/story_detail.html ('django' engine)
    • /home/html/default/news/story_detail.html ('django' engine)
    • /home/html/jinja2/news/story_detail.html ('jinja2' engine)

       dirs :该参数从1.8起被移除,这里不再讨论。

       using:表示要使用哪个引擎进行查找,该参数接受的是模板引擎的 NAME ,详情参考上面的配置中的 NAME。默认为 None ,如上面的例子所示,为 None 时将使用两个引擎进行查找,两个引擎按配置的先后进行查找,如果指定了使用某个引擎,另一个引擎就不会再查找了。

     

    2. select_template(template_name_list[, dirs][, using]) 

      select_template() 和 get_template()很相似, 只不过它用了一个模板名称的列表作为参数。按顺序搜索模板名称列表内的模板并返回第一个存在的模板。

    例如:如果你调用函数 select_template(['story_253_detail.html', 'story_detail.html']), Django按以下顺序查找:

    • /home/html/example.com/story_253_detail.html ('django' engine)
    • /home/html/default/story_253_detail.html ('django' engine)
    • /home/html/jinja2/story_253_detail.html ('jinja2' engine)
    • /home/html/example.com/story_detail.html ('django' engine)
    • /home/html/default/story_detail.html ('django' engine)
    • /home/html/jinja2/story_detail.html ('jinja2' engine)

      其他的参数都是一样的,这里不重复说明。

      你可以通过 select_template() 来实现更为灵活的模板加载。例如: select_template(['story_%s_detail.html' %story.id, 'story_detail.html'])的形式。

     


     

    渲染

      按照约定,查找到的模板,也就是调用上面两个搜索模板的函数后,将返回一个由后端模板引擎所定义的 Template 对象,该对象必须实现 render()方法,所以在自定义模板引擎的时候要要注意这一点。

     Template.render(context=None, request=None) 

      context:它必须是一个python字典对象(dict),将用这个字典对模板进行渲染,如果没有提供,将使用一个空的字典。

      request:它必须是一个 Httprequest 对象,后端引擎必须妥善处理它,同时还要处理 CSRF 令牌,当然如何实现是后端引擎做的事,也取决于不同的后端引擎。

     render_to_string(template_name[, context][, context_instance][, request][, using]) 

      也是位于 django.template.loader 中,用于将模板渲染后返回字符串。

      template_name:模板名称,如果是一个字符串,将调用 get_template() 方法;如果是一个列表将调用 select_template() 方法。

      context:一个python字典,用来渲染模板。

      context_instance:从1.8版本起废弃,这里不再讨论。

      request:必须是一个 HttpRequest 对象,并且在整个模版渲染期都是可用的。

      using:用来指定查找模板的引擎。

     


     

    快捷函数

      一般而言我们可以将渲染后的字符串作为 HttpResponse 的第一个参数,作为构建响应报文的主体。

      由于这个动作实在太常有了:加载--渲染--返回;所以django提供了两个快捷函数来处理这些事务。

      这两个位于 django.shortcuts 模块中,在使用前记得先导入。

     render(request, template_name[, context][, context_instance][, content_type][, status][, current_app][, dirs][, using]) 

      这个函数实现查找,加载,渲染,构建 HttpResponse 对象一整套流程,所以我们可以使用它来节省许多功夫。

      request:用于生成 response 对象的 request 对象。

      template_name:模板名称,或者是包含许多模板名称的列表。

      context:渲染使用的python字典。

      context_instance:1.8版本起废弃,这里不再讨论。

      content_type:指定 MIME 类型,默认为 DEFAULT_CONTENT_TYPE  的值。

      status:响应的状态码,默认为200.

      current_app:指示哪个应用包含当前的视图。1.8版本后废弃,现在要设置 request.current_app 进行代替。

      using:用于加载模板使用的模板引擎的名称

    例子:

    from django.shortcuts impor
    首页 上一页 1 2 3 4 下一页 尾页 3/4/4
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇virtualenvwrapper安装使用 下一篇Python Pandas 分析郁达夫《故都..

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目