Django知识-06

模板之变量

所有的数据类型都可以在模板中使用

render(request , 'index.html',context = {' '});

render(request , 'index.html',context = locals());

在模板中使用变量的时候,使用的是字典的key值,key值和value值保持一致

模板之过滤器

# HTML被直接硬编码在 Python代码之中,Django的 模板系统(Template System)

# 过滤器给我们提供的有六十多个,但是我们只需要掌握10个以内即可
         过滤器名称就是函数名

# 语法:
{{ obj|filter__name:param }}     变量名字|过滤器名称:变量

default:如果一个变量是false或者为空,使用给定的默认值,否则使用变量的值

length:返回值的长度,对字符串和列表都起作用

filesizeformat:将值格式化为一个 “人类可读的” 文件尺寸   #  '13 KB', '4.1 MB'

date:日期格式

slice:切片

truncatechars:如果字符串字符多于指定的字符数量,那么会被截断,省略号序列(“…”)结尾

safe:告诉Django这段代码是安全的不必转义

# views.py
from django.shortcuts import render

# Create your views here.
def index(request):
    a = False
    l = [1,2,3,4,5]
    size = 43434343434342
    import datetime
    ctime = datetime.datetime.now()
    value = 'helloworld'

    from django.utils.safestring import mark_safe
    # 有很多时候前端的代码也可以在后端处理
    s1 = mark_safe('<h1>hello</h1>')
    return render(request,'index.html',locals())
# index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
{{ a|default:'hello' }}
{{ l|length }}
{{ size| filesizeformat}}
{{ ctime| date:"Y-m-d"}}
{{ value| slice:'2:-1'}}
{{ s1|safe }}
</body>
</html>

# 其它过滤器(了解)

upper	  以大写方式输出
add	      给value加上一个数值
addslashes	单引号加上转义号
capfirst	第一个字母大写
center	    输出指定长度的字符串,把变量居中
cut	        删除指定字符串
date	    格式化日期
default	    如果值不存在,则使用默认值代替
default_if_none	     如果值为None, 则使用默认值代替
dictsort	         按某字段排序,变量必须是一个dictionary
dictsortreversed	 按某字段倒序排序,变量必须是dictionary
divisibleby	         判断是否可以被数字整除
escape	             按HTML转义,比如将”<”转换为”&lt”
filesizeformat	增加数字的可读性,转换结果为13KB,89MB,3Bytes等
first	        返回列表的第1个元素,变量必须是一个列表
floatformat	    转换为指定精度的小数,默认保留1位小数
get_digit	    从个位数开始截取指定位置的数字
join	        用指定分隔符连接列表
length	        返回列表中元素的个数或字符串长度
length_is	检查列表,字符串长度是否符合指定的值
linebreaks	用/或/标签包裹变量
linebreaksbr	用/标签代替换行符
linenumbers	    为变量中的每一行加上行号
ljust	        输出指定长度的字符串,变量左对齐
lower	        字符串变小写
make_list	将字符串转换为列表
pluralize	根据数字确定是否输出英文复数符号
random	    返回列表的随机一项
removetags	删除字符串中指定的HTML标记
rjust	    输出指定长度的字符串,变量右对齐
slice	    切片操作, 返回列表
slugify	    在字符串中留下减号和下划线,其它符号删除,空格用减号替换
stringformat	字符串格式化,语法同python
time	        返回日期的时间部分
timesince	以“到现在为止过了多长时间”显示时间变量
timeuntil	以“从现在开始到时间变量”还有多长时间显示时间变量
title	    每个单词首字母大写
truncatewords	       将字符串转换为省略表达方式
truncatewords_html	   同上,但保留其中的HTML标签
urlencode	           将字符串中的特殊字符转换为url兼容表达方式
urlize	               将变量字符串中的url由纯文本变为链接
wordcount	           返回变量字符串中的单词数

模板之for标签

# 标签看起来像是这样的: {% tag %}
# 标签比变量更加复杂:一些在输出中创建文本,一些通过循环或逻辑来控制流程,一些加     载其后的变量将使用到的额外信息到模版中。
# 一些标签需要开始和结束标签 (例如{% tag %} ...标签 内容 ... {% endtag %})

for标签

{% for person in person_list %}
    <p>{{ person.name }}</p>
{% endfor %}
#可以利用{% for obj in list reversed %}反向完成循环。

遍历一个字典:

{% for key,val in dic.items %}
    <p>{{ key }}:{{ val }}</p>
{% endfor %}

{% for foo in d.keys %}
    <p>{{ foo }}</p>
{% endfor %}

{% for foo in d.values %}
    <p>{{ foo }}</p>
{% endfor %}

{% for foo in d.items %}
    <p>{{ foo }}</p>
{% endfor %}

注:循环序号可以通过{{forloop}}显示

        forloop.counter           序号
        forloop.counter0         索引值
        forloop.revcounter        当前循环的倒序索引值(从1开始)
        forloop.revcounter0      当前循环的倒序索引值(从0开始)
        forloop.first            当前循环是不是第一次循环(T/F)
        forloop.last             当前循环是不是最后一次循环(T/F)
        forloop.parentloop        本层循环的外层循环

for … empty:以便在给出的组是空的或者没有被找到时,可以有所操作。

{% for person in person_list %}
    <p>{{ person.name }}</p>
{% empty %}
    <p>sorry,no person here</p>
{% endfor %}

模板之if标签和with

if标签

#  {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值)对应的内容块会输出

#  if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断

{% if num > 100 or num < 0 %}
    <p>无效</p>
{% elif num > 80 and num < 100 %}
    <p>优秀</p>
{% else %}
    <p>凑活吧</p>
{% endif %}

with标签:起别名

#  使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

d = {'username':'kevin','age':18,'info':'这个人有点意思','hobby':[111,222,333,{'info':'NB'}]}

# with起别名
{% with d.hobby.3.info as nb  %}
    <p>{{ nb }}</p>
    在with语法内就可以通过as后面的别名快速的使用到前面非常复杂获取数据的方式
    <p>{{ d.hobby.3.info }}</p>
{% endwith %}

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}
不要写成as

# 自定义的标签和过滤器:

        1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的                       simple_tag.

        2、在app中创建templatetags模块(模块名只能是templatetags

        3、创建任意 .py 文件,如:my_tags.py

from django import template
from django.utils.safestring import mark_safe
 
register = template.Library()   #register的名字是固定的,不可改变
 
@register.filter
def filter_multi(v1,v2):
    return  v1 * v2
    
@register.simple_tag
def simple_tag_multi(v1,v2):
    return  v1 * v2
    
@register.simple_tag
def my_input(id,arg):
    result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
    return mark_safe(result)

模板的继承和导入

# 模块之继承:          

{% entends 'home.heml' %}
head:
{% block css %}
    <script>
        
    </script>
{% endblock %}

# 一定要在被继承的页面中划分区域,你需要在哪个地方划分哪一块,可以划分多个区域,

{% block css %}
    <style>
        h1{
            color: red;
        }
    </style>
{% endblock %}


{% block js %}
    <script>
        alert('login')
    </script>
{% endblock %}

{% include 'haha.html' %}

#  导入语法:{% include '模版名称' %}  如:{% include 'adv.html' %}

测试脚本

# 当你只是想测试django中的某一个py文件内容 那么你可以不用书写前后端交互的形式
   而是直接写一个测试脚本即可

# 脚本代码无论是写在应用下的tests.py还是自己单独开设py文件都可以
# 测试环境的准备 去manage.py中拷贝前四行代码 然后自己写两行

import os
import sys

if __name__ == "__main__":
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day64.settings")
    import django
    django.setup()

# 在这个代码块的下面就可以测试django里面的单个py文件了

今日思维导图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值