美文网首页
The Django Book 第四章 模板 (3)

The Django Book 第四章 模板 (3)

作者: Alex_Honnold | 来源:发表于2017-10-14 10:39 被阅读0次

本书网站链接

这篇主要讲述在视图中使用模板

模板加载:
方式一,get_template()加载模板:

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime
def current_datetime(request):
    now = datetime.datetime.now()
    t = get_template('current_datetime.html')
    html = t.render(Context({'current_date': now}))
    return HttpResponse(html)

方式二,render_to_response():

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

local()的使用:

def current_datetime(request):
    now = datetime.datetime.now()
    return render_to_response('current_datetime.html', {'current_date': now})

def current_datetime(request):
    current_date = datetime.datetime.now()
    return render_to_response('current_datetime.html', locals())

get_template():

return render_to_response('dateapp/current_datetime.html', {'current_date': now})

include 模板标签:
  内建模板标签: {% include %} 。该标签允许在(模板中)包含其它的模板的内容。 标签的参数是所要包含的模板名称,可以是一个变量,也可以是用单/双引号硬编码的字符串。 每当在多个模板中出现相同的代码时,就应该考虑是否要使用 {% include %} 来减少重复。

下面这两个例子都包含了 nav.html 模板。这两个例子是等价的,它们证明单/双引号都是允许的。

{% include 'nav.html' %}
{% include "nav.html" %}

# 下面的例子包含了 includes/nav.html 模板的内容:
{% include 'includes/nav.html' %}

# 下面的例子包含了以变量 template_name 的值为名称的模板内容:
{% include template_name %}

include模板的使用:

# mypage.html
<html>
<body>
{% include "includes/nav.html" %}
<h1>{{ title }}</h1>
</body>
</html>
# includes/nav.html
<div id="nav">
    You are in: {{ current_section }}
</div>

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

基础模板定义 base.html:

<!DOCTYPE HTML PUBLIC "‐//W3C//DTD HTML 4.01//EN">
<html lang="en">
<head>
    <title>{% block title %}{% endblock %}</title>
</head>
<body>
    <h1>My helpful timestamp site</h1>
    {% block content %}{% endblock %}
    {% block footer %}
    <hr>
    <p>Thanks for visiting my site.</p>
    {% endblock %}
</body>
</html>

子模板定义:

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

以下是使用模板继承的一些诀窍:
如果在模板中使用 {% extends %} ,必须保证其为模板中的第一个模板标记。 否则,模板继承将不起作用。

一般来说,基础模板中的 {% block %} 标签越多越好。 记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。 俗话说,钩子越多越好。

如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个 {% block %} 中。

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

不允许在同一个模板中定义多个同名的 {% block %} 。 存在这样的限制是因为block 标签的工作方式是双向的。 也就是说,block 标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的 {% block %} 标签,父模板将无从得知要使用哪个块的内容。

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

多数情况下, {% extends %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。 这使得你能够实现一些很酷的动态功能。

相关文章

  • The Django Book 第四章 模板 (3)

    本书网站链接 这篇主要讲述在视图中使用模板 模板加载:方式一,get_template()加载模板: 方式二,re...

  • Django 五

    目录 1.Django 模板的导入 2.Django 模板的继承 3.Django 搭建测试环境 4.Django...

  • The Django Book 第四章 模板 (1)

    本书网站链接 这篇主要讲述三方面:1.模板的基本标签;2.模板基本使用方法;3.句点变量的调用。 一个简单例子的模...

  • The Django Book 第四章 模板 (2)

    本书网站链接 这篇主要详细讲述基本的模板标签 1.if/else基础使用: 或者 示例,{% if %} 标签接受...

  • python Django学习资料

    Django资源: Django 最佳实践 Django搭建简易博客教程 The Django Book 中文版 ...

  • Python构建网站

    Python Django框架网站搭建入门 Django 中文文档 The Django Book

  • django学习笔记

    每次用django都要重新看django book,太不熟悉了。这个寒假一定记下来!参考django book前三...

  • Django 二

    目录 1.Django模板冲突问题 2.Django路由分发 3.有名分组和无名分组 4.Django创建app流...

  • Django handy notes

    Django Handy Notes 如何关闭Django模板的自动转义 Django的模板中会对HTML标签和J...

  • Django之Template介绍及日常应用

    Django模板语言 Django模板是一个简单的文本文档,或用Django模板语言标记的一个Python字符串。...

网友评论

      本文标题:The Django Book 第四章 模板 (3)

      本文链接:https://www.haomeiwen.com/subject/rsyoyxtx.html