django-html 模板语法规则介绍

        

views.py内创建的字典的 key,value:{"HTML模板的变量名" : "要给变量赋的值"}
HTML模板:{{变量名}}

列表

 模板文件可以用  索引下标取出对应的元素。

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_list = ["列表元素一","列表元素二","列表元素三"]
    return render(request, "index.html", {"views_list": views_list})

模板文件内文件代码:

<p>{{ views_list }}</p>   # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

获取响应数据。

字典

 模板文件可以用  .key  取出对应的值。

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_dict = {"name":"我是name键的value"}
    return render(request, "index.html", {"views_dict": views_dict})

模板文件内文件代码:

<p>{{ views_dict }}</p>       --  获取整个字典的内容
<p>{{ views_dict.name }}</p>  --  获取字典内name键的值

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

来获取响应。。

过滤器

模板语法:

{{ 变量名 | 过滤器:可选参数 }}

 模板文件可以用  .key  取出对应的值。

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_dict = {"name":"我是name键的value"}
    return render(request, "index.html", {"views_dict": views_dict})

模板文件内文件代码:

<p>{{ views_dict }}</p>       --  获取整个字典的内容
<p>{{ views_dict.name }}</p>  --  获取字典内name键的值

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

来获取响应。。

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_list = ["one",'two','THREE']
    return render(request, "index.html", {"views_list": views_list})

模板过滤器可以在变量被显示前修改它,过滤器使用管道字符,如下所示:模板文件代码:

# 过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:
<p>{{ views_list|first|upper }}</p>  -- 过滤器拿到第一位list值将其转化成大写
<p>{{ views_list.2|lower }}</p> -- 过滤器拿到下标为2的元素的list值将其转化成小写、0为第一位

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_dict = {"name":"一 二 三 四 五"}
    return render(request, "index.html", {"views_dict": views_dict})

模板文件内文件代码:

有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含。 例如:

<p>{{ views_dict.name|truncatewords:"3" }}</p>  -- 过滤器以到空格为一个词获取dict.name的值的前三个词

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    return render(request, "index.html", {"name": 0 })

模板文件内文件代码:默认值

<p>{{ name|default:"我是默认值" }}</p>  --  为变量提供一个默认值。如果 views 传的变量的布尔值为 false,则使用指定的默认值。
为空,为0,的值都为flase

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

求长度-- length

 case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    return render(request, "index.html", {"name": "这是五个字" })

模板文件内文件代码:

<h1>{{ 变量名|length}}</h1>  --  返回对象的长度,适用于字符串和列表。字典返回的是键值的数量,集合返回的是去重后的长度。

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

显示文件的大小:filesizeformat

 case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    return render(request, "index.html", {"name": 1024 })

模板文件内文件代码:

<p>{{ num|filesizeformat}}</p>   --  将数值转化成易懂的文件大小值- 434.0 KB

 然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

 时间显示-- data

 case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    import datetime
    now = datetime.datetime.now()
    return render(request, "index.html", {"time": now})

模板文件内文件代码:

<p>{{ time|date:"Y-m-d H:i:s" }}</p>  --  Y-m-d H:i:s返回 年-月-日 小时:分钟:秒 的格式时间。

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

 

限制可显示的字符个数: truncatechars

 case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    return render(request, "index.html", {"views_str": "一二三四"})

模板文件内文件代码:

<p>{{ views_str|truncatechars:2}}</p>  -- 限制改变量可传入的字符个数,大于会被截断。截断的字符串将以 ... 结尾

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

接收可执行代码: safe

Django 会自动对 views.py 传到HTML文件中的标签语法进行转义,令其语义失效。加 safe 过滤器是告诉 Django 该数据是安全的,不必对其进行转义,可以让该数据语义生效。

 case/index/views.py 文件代码:

from django.shortcuts import render

def index(request):
    views_str = "<a href='https://www.runoob.com/'>点击跳转</a>"
    return render(request, "runoob.html", {"views_str": views_str})

模板文件内文件代码:

<p>{{ views_str|safe }}</p>   -- 将传进来的语句设为安全-可执行的,不对其进行转义操作,如:"<a href='https://www.runoob.com/'>点击跳转</a>"替换变量,点击就会跳转,相当于在变量位置插入一段这个可执行代码

然后访问自己指定的网址,默认为 http://127.0.0.1:8000/index/

判断语句: if -- elif -- else -- endif

条件判断语句:{% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断
基本和python的if语句相同,支持嵌套
    {%if num > 90 and num <= 100 %}
    优秀
    {% elif num > 60 and num <= 90 %}
    合格
    {% else %}
    一边玩去~
    {% endif %}    --  结束 if 语句

   循环语句: for  --  endfor

循环语句: 循环语句可支持嵌套循环和python一样
    {% for i,j in views_dict.items %}
        <h1>{{ i }}</h1>
        <ul>
        {% for sport in j reversed %}   -- 加个 reversed 可将列表反向循环,最后一个变第一个
            <li>{{ sport }}</li>
        {% endfor %}    -- 结束 for 语句
        </ul>
    {% endfor %}  -- 结束 for 语句

可选的 {% empty %} 从句

{% empty %}   -- 可通过该条语句判断其值内有没有值,当其值为空时html上就显示"空空如也"

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

模板内嵌入另一个模板: include

{% include "nav.html" %}  --  {% include %} 标签允许在模板中包含其它的模板的内容。

<h1>{{ 变量名|addslashes }}</h1>   -- 添加反斜杠到任何反斜杠、单引号或者双引号前面。


{# #} 或 ctrl + /  -- 单行注释
csrf_token

如果不用 {% csrf_token %} 标签,在用 form 表单时,要再次跳转页面会报 403 权限错误。
用了{% csrf_token %} 标签,在 form 表单提交数据时,才会成功。

{% csrf_token %}
首先,向服务器发送请求,获取登录页面,此时中间件 csrf 会自动生成一个隐藏input标签,
该标签里的 value 属性的值是一个随机的字符串,用户获取到登录页面的同时也获取到了这个隐藏的input标签。
然后,等用户需要用到form表单提交数据的时候,会携带这个 input 标签一起提交给中间件 csrf,
原因是 form 表单提交数据时,会包括所有的 input 标签,中间件 csrf 接收到数据时,会判断,
这个随机字符串是不是第一次它发给用户的那个,如果是,则数据提交成功,如果不是,则返回403权限错误。

自定义过滤器,以及标签:
1.在项目根目录下创建一个templatetags 目录

2、在 templatetags 目录下创建任意 py 文件,如:my_tags.py

3、my_tags.py 文件代码如下:

from django import template

register = template.Library()   #register的名字是固定的,不可改变

4.修改 settings.py 文件的 TEMPLATES 选项配置,添加 libraries 配置:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR, "/templates",],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
            "libraries":{                          # 添加这边三行配置
                'my_tags':'templatetags.my_tags'   # 添加这边三行配置        
            }                                      # 添加这边三行配置
        },
    },
]

 4、在使用自定义标签和过滤器前,要在 html 文件 body 的最上方中导入该 py 文件。

{% load my_tags %}

4、利用装饰器 --- @register.filter  --- 自定义 过滤器

注意:装饰器的参数最多只能有 2 个。

@register.filter
def my_filter(v1, v2):
    return v1 * v2

4.1、在 HTML 中使用自定义过滤器。

{{ 11|my_filter:22 }}

5、利用装饰器 --- @register.simple_tag --- 自定义 标签

定义标签时,用上 mark_safe 方法,令标签语义化(将其转为可执行代码),和 HTML文件中的过滤器 safe 效果一样。

语义化标签 -- 。在 my_tags.py 文件中导入 mark_safe。

from django.utils.safestring import mark_safe
@register.simple_tag
def my_html(v1, v2):
    temp_html = "<input type='text' id='%s' class='%s' />" %(v1, v2)
    return mark_safe(temp_html)

5.1 在HTML中使用该自定义标签,在页面中动态创建标签。

{% my_html "zzz" "xxx" %}

传给my_html函数两个值,让其替换语句内的内容,再将可执行语句通过 mark_safe转发给模板,填充后响应给用户

 

模板语法url的参数设置与路由定义是相互关联的:

若路由地址存在变量,则模板语法url需要设置响应的参数值,参数值之间使用空格隔开。 若路由地址不存在变量,则模板语法url只需设置路由命名name即可,无须设置额外的参数。 若路由地址的变量与模板语法url的参数数量不相同,则在浏览器访问网页的时候会提示NoReverseMatch at的错误信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值