标签

  • {% %} 标识符
    - 标签分为单标签和成对的标签
    - 成对的标签切记不能省略,开始标签和结束标签

    ifequal 如果相等

      {%  ifequal  value1 value2 %}
      语句
      {% endifequal %}
    ifnotequal 如果不相等
    实践:第五行变色

<ul>
    {% for student in students %}
        {% ifequal forloop.counter 5 %}
            <li style="color: red">{{ student.s_name }}</li>
        {% else %}
            <li style="color: cornflowerblue">{{ student.s_name }}</li>
        {% endifequal %}
    {% endfor %}
</ul>


 

url: 反向解析

  {% url 'namespace:name' p1 p2 %}

csrf_token

用于跨站请求伪造保护的

  格式 {% csrf_token %}

跨站请求伪造
  某些恶意网站包含链接,表单,按钮,Js利用登陆用户在浏览器中的认证信息,进行非法操作,攻击服务,破坏数据
在表单中添加
{% csrf_token %}
在settings中的中间件MIDDLEWARE中配置打开
  'django.middleware.csrf.CsrfViewMiddleware',

过滤器:  {{var|过滤器 }}

作用:在变量显示前修改

加法:

add  {{ p.page | add : 5 }}
没有减法过滤器,但是加法里可以加负数
  {{ p.page | add : -5}}

实践:

<h3>{{ count|add:5 }}</h3>
<h3>{{ count|add:-5 }}</h3>

lower:转成小写

  {{ p.pname|lower }}

upper:转成大写

  {{ p.pname|upper }}
实践:

<h3>{{ student_dict.hobby|upper }}</h3>


过滤器可以传递参数,参数需要使用引号引起来
比如join:  {{
students|join '=' }}
默认值:default,格式
{{var|default 
value}}
如果变量没有被提供或者为False,空,会使用默认值
根据指定格式转换日期为字符串,处理时间的
就是针对date进行的转换 

  {{  dateVal | date:'y-m-d' }}

HTML转义

  将接收到的数据当成普通字符串处理还是当成HTML代码来渲染的一个问题
渲染成html:{{ code|safe}}    但是要小心JS注入,确保数据是真的安全可靠
{% autoescape
off%}
  code
{% endautoescape %}
不想渲染
{% autoescape
on%}
  code
{% endautoescape %}

模板继承(重要)

模板也可以继承
关键字block:挖坑
  {% block XXX%}
  code
  {% endblock %}
extends
继承,写在开头位置
  {% extends 
'父模板路径'
%}
include:    加载模板进行渲染
  格式{% include '模板文件'
%}

比如说淘宝首页
头部:

在大部分地方都是统一有这个头部文件的
规划页面先去排版,在模板中用block对网页进行规划,划分区域
比如说淘宝首页的头部

结构标签

block

  • 用来规划我们的布局 (挖坑)
  • 首次出现,代表规划
  • 第二次出现,代表填充以前的规划
  • 第三次出现, 代表填充以前的规划,默认动作是覆盖

    • 如果不想覆盖,可以添加  {{ block.super }}
    • 这样就实现了增量式操作

extends

  • 继承
  • 可以获取父模板中的所有结构

block + entends

  • 化整为零,将一个很复杂的页面切割成很多小页面,然后一点一点的制作出来

include

  • 包含
  • 可以将页面作为一部分,嵌入到其它页面中

include + block

  • 由零聚一,一块块聚成一起
  • 三个标签也可以混合使用
  • 但是能用block + extends搞定的  就尽量不要使用include,性能低
  • 如果我们继承自一个父模板,子模版自己直接重写页面结构是不生效的,只能在已有坑中进行填充,如果我们的html继承自父模板,我们只能在规划好的坑里填数据,如果在坑外填写标签,会被自动优化掉。

实践:block+extends

模板中新建一个base.html
这个html用来规划网站首页的布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
{% block header %}
{% endblock %}

{% block banner %}
{% endblock %}

{% block coutent %}
{% endblock %}

{% block footer %}
{% endblock %}


</body>
</html>

再建一个首页home.html,进行填坑

{% extends 'base.html'%}
{% block header %}
    <h3>'哈哈哈哈,这是一个头'</h3>
{% endblock %}

建url:url('temp/',views.temp)
views函数:

def temp(request):
    return render(request, 'home.html', context={'title': 'home'})

访问/app/temp/:

接着我们再创建home_mine.html文件继承home.html

{% extends 'home.html' %}
{% block coutent %}
<h3>哈哈哈你就是这么强大</h3>
{% endblock %}

接着添加url和views:

# url
url('home/', views.home),

# views
def home(request):
    return render(request, 'home_mine.html')


我们发现了,原来有的内容,我们都可以继承过来
我们还发现我们在做一个操作时,这个坑出现了第三次,三次以上,默认会覆盖掉原来的内容

但是我们还可以用{{block.super}}调用父类,防止被覆盖
操作:

{% extends 'home.html' %}
{% block coutent %}
<h3>哈哈哈你就是这么强大</h3>
{% endblock %}
{% block header %}
    {{ block.super }}
    <h4>听说你很good</h4>
{% endblock %}

这样我们就显示了home.html的header,和home_mine.html的header

实践:include+block

创建新html文件include

<h4>本网站受美国法律保护!xxx</h4>

接着我们在home_mine.html中添加

{% block footer %}
{% include 'footer.html' %}
{% endblock %}

结果:

相当于嵌入到其他页面中
include也可以单独使用

静态资源

  • 动静分离,逻辑是动态代码,css.html等是静态

步骤:

  • 创建静态文件夹
  • 在settings中注册 STATICFILES_DIRS=[]
  • 在模板中使用

    • 先加载静态资源  {% load static %}
    • 使用 {% static 'xxx' %}  xxx相对路径
  • 坑点

    • 仅在debug模式可以使用
    • 以后需要自己单独处理

    实践

    我们想要给网页中的h3标签添加红色样式,我们可以使用style,但是这样很low,我们可以使用CSS将样式拆分开来

我们可以在父模板对样式挖一个坑,在base.html中添加ext_css的坑:

接着我们在home_mine.html中填坑

{% block ext_css %}
    <link rel="stylesheet" href="/static/css/home_mine.css">
{% endblock %}

这时候我们创建static/css文件夹,创建home_mine.css文件:

h3{
    color: red;
}

接着我们访问


观察到虽然html中有这个标签,但是h3颜色没有改变

原因是没有在系统中注册

注册css资源

在settings.py中添加:

STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static'),
]

注册静态文件,告诉系统静态资源路径
但是我们/static/css/home_mine.css这种绝对路径写法不提倡,我们用相对路径来写
我们在home_mine中添加

{% load static %}

接着改为:

{% block ext_css %}
{#    <link rel="stylesheet" href="/static/css/home_mine.css">#}
    <link rel="stylesheet" href="{% static 'css/home_mine.css' %}">
{% endblock %}

这样我们用相对路径方便以后文件变更

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏