模板标签

一、模板标签

标签在渲染的过程中提供任意的逻辑

其实对于上述概念理解起来较为困难,这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。

标签语法: 由%}和 {% 来定义的,例如:{%tag%} {%endtag%} 

现在传一个字符串、一个列表、一段HTML进去

return render(request,'book/index.html',context = {'name':'django','mylist':['python','django','tornado'],'html':'I AM A BIG BOY !!'})

 

if

{% if name == 'python' %}
    这是python的页面
{% elif name == 'django' %}
    这是django的页面
{% else %}
    其他

 模板标签_第1张图片

 

for

{% for foo in mylist %}
    {% if forloop.counter == 1 %}
        <li>这是第一个值:{{ foo }}li>
    {% else %}
        <li>{{ foo }}li>
    {% endif %}
{% endfor %}

模板标签_第2张图片

 

URL页面转换 

urlpatterns = [
    path('test/',views.test,name='test'),
    path('test1/',views.test1,name='test1'),
    path('index/',views.index),
]

值得注意的是,模板中的URL后边缀的是urls.py中的name值

 

 

WITH

用来临时更改变量名,使得长且复杂的变量名变得临时简单

原来的name:{{ name }}<br>
{% with name as n %}
    临时更改:{{ n }}<br>
{% endwith %}

模板标签_第3张图片

 

AUTOESCAPE

取消自动转义

原始的HTML:{{ html }}<br>
过滤器方式:{{ html | safe }}<br>
标签的方式:
{% autoescape off %}
    {{ html }}
{% endautoescape %}

模板标签_第4张图片

常用的标签

模板标签_第5张图片

 

二、模板继承

Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让你创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 

创建三个模板文件

模板标签_第6张图片

base.html 这个作为模板继承页
indexxxx.html 在这个模板中实现继承和引用
ss.html 这个作为模板的引用页

DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{% block title %}默认标题 {% endblock %}title>
head>
<body>

{% block content %}
    默认内容
{% endblock %}

{% block demo %}
    默认演示
{% endblock %}

body>
html>
base.html
{% extends 'book/base.html' %}
{% block title %} Chancey主页 {% endblock %}
{% block content %}
    通过block.super继承父类:{{ block.super }}<br>
    子模板自己的内容,没有写就不会显示<br>
{% endblock %}
{% block demo %}
    通过include引用其他模板的内容:{% include 'book/ss.html' %}
{% endblock %}
indexxxx.html
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>内容title>
head>
<body>
菜鸟程序员,Chancey(别名:素心)
body>
html>
ss.html

 

模板语法:

继承语法  {% extends 'book/base.html' %} 

重写语法  {% block title %} 需要重写的内容 {% endblock %} 

新增语法  {{ block.super }} 要新增的内容 //值得注意的是,该语法写在block里面 

引用:

include 如果需要模板来填充子模版的某一块内容,则使用它是最简便的方法

语法: {% include 'book/ss.html' %} 

 

模板继承小结:

模板继承使用extends标签实现。通过使用block来给子模板开放接口。

  1. extends必须是模板中的第一个出现的标签。
  2. 子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。
  3. 如果出现重复代码,就应该考虑使用模板。
  4. 尽可能多的定义block,方便子模板实现更细的需求。
  5. 如果在某个block中,要使用父模板的内容,使用block.super获取。

你可能感兴趣的:(模板标签)