当前位置:   article > 正文

Django基础知识点二:模板配置和输出_django get_template

django get_template

一,get_template 函数

  1. from django.template.loader import get_template
  2. from django.http import HttpResponse
  3. import datetime
  4. def temp_test(request):
  5. now = datetime.datetime.now()
  6. t = get_template('temp_test.html')
  7. html = t.render({'current_date': now})
  8. return HttpResponse(html)

模板输出:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. It is now {{ current_date }}
  9. </body>
  10. </html>

get_template() 函数以模板名称为参数,在文件系统中找出模块的位置,打开文件并返回一个编译好的Template 对象

二,render_to_response() 渲染模板

  1. from django.shortcuts import render_to_response
  2. import datetime
  3. def current_datetime(request):
  4. now = datetime.datetime.now()
  5. return render_to_response('current_datetime.html', {'current_date': now})

render_to_response() 的第一个参数必须是要使用的模板名称。 如果要给定第二个参数,那么该参数必须是为该模板创建  Context 时所使用的字典。 如果不提供第二个参数,  render_to_response() 使用一个空字典。

三,locals() 技巧

  1. from django.shortcuts import render_to_response
  2. import datetime
  3. def temp_test(request):
  4. now = datetime.datetime.now()
  5. return render_to_response('temp_test.html', locals())

 locals() 的值,它囊括了函数执行到该时间点时所定义的一切变量

此时对应html输出的格式应该为:

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. It is now {{ now }}
  9. </body>
  10. </html>

四,get_template()中使用子目录

  1. from django.shortcuts import render_to_response
  2. import datetime
  3. def temp_test(request):
  4. now = datetime.datetime.now()
  5. return render_to_response('member/temp_test.html', locals())

只需在调用  get_template() 时,把子目录名和一条斜杠添加到模板名称之前

由于  render_to_response() 只是对  get_template() 的简单封装, 你可以对  render_to_response() 的第一个参数做相同处理

五,模板包含和模板继承

1,模板包含:include();  公共头部,公共尾部,以当前模板目录路径为准

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
  5. <title>Document</title>
  6. </head>
  7. <body>
  8. {% include 'common/nav.html' %}
  9. It is now {{ now }}
  10. </body>
  11. </html>

2,模板继承:block 用法

概念:模板继承就是先构造一个基础框架模板,而后在其子模板中对它所包含站点公用部分和定义块进行重载

  1. <!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01//EN">
  2. <html lang="en">
  3. <head>
  4. <title>{% block title %}{% endblock %}</title>
  5. </head>
  6. <body>
  7. <h1>My helpful timestamp site</h1>
  8. {% block content %}{% endblock %}
  9. {% block footer %}
  10. <hr>
  11. <p>Thanks for visiting my site.</p>
  12. {% endblock %}
  13. </body>
  14. </html>

 所有的  {% block %} 标签告诉模板引擎,子模板可以重载这些部分。 每个 {% block %} 标签所要做的是告诉模板引擎,该模板下的这一块内容将有可能被子模板覆盖。

则子模板就可以更改为:

  1. {% extends "base.html" %}
  2. {% block title %}The current time{% endblock %}
  3. {% block content %}
  4. <p>It is now {{ current_date }}.</p>
  5. {% endblock %}

功能核心点:

1,如果在模板中使用  {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。
2,一般来说,基础模板中的  {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义

3,如果需要访问父模板中的块的内容,使用  {{ block.super }} 这个标签,这一个魔法变量将会表现出父模板中的内容。 如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用。
4,不允许在同一个模板中定义多个同名的  {% block %} 。 

5,{% extends %} 对所传入模板名称使用的加载方法和  get_template() 相同。 也就是说,会将模板名称被添加到  TEMPLATE_DIRS 设置之后。

6,多数情况下,  {% extends %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/184036?site
推荐阅读
相关标签
  

闽ICP备14008679号