Django框架学习笔记(六)模板语言DTL

一、如何在app里建立模板文件夹

如果想把模板文件夹建立在app里的话,需要完成以下操作:
(1) templates文件夹需要Mark Directory as Templates Floder
(2) settings.py里的TEMPLATES中的APP_DIRS属性需要设置成True

图片.png

注意:如果模板放在app中,必须保证当前app已被安装;在settings的INSTALLED_APPS中添加app名称。

二、 如何把views中的值传到templates中

在views的方法里,如果想把值传到templates中必须使用字典类型,然后在render方法中将字典名传给context参数。在html中使用模板语言{{ 键名 }}进行访问。

案例:在views中将用户名Swift传递给html页面中的div显示出来

def index(request):
    username = "Swift"
    # 如果想把值传到Templates中,必须传递字典类型
    content ={'user': username}
    # user:在模板中通过这个名称访问,username:具体传过去的值
    return render(request, 'index.html', context=content)

在html中通过div标签展示出来:

<div id="div01">{{ user }}</div>

注意:无论是传递单个元素还是多个元素,都需要通过字典的方式进行传递。如果需要传递列表,也应该把列表封装成字典的一个键值对。在模板语言中访问列表或者元组中的元素时可以使用变量名.数字来访问列表中的元素,访问字典中的元素可以使用变量名.键名来访问。

三、在模板语言中使用if标签

if标签代表着条件选择,模板语言中的if标签可以写成这样:

{% if "小雨" in persons%}
    <p> 名单中有小雨 </p>
{% else %}
    <p> 名单中没有小雨 </p>
{% endif %}

常见的比较运算符有:

==、!=、<、<=、>、>=、in 、not in 、is、 is not
案例:

某网站在数据库中存储了账号信息,
Type的值为1:普通会员;
Type的值为2:高级会员;
Type的值为3:管理员;
在登陆的时候,按照Type的值显示出类别信息,如果匿名访问提供登录的链接。

实现过程

我们在views里读取url中的username和type,打包成字典类型通过context属性传递给模板文件。

def index(request):
    username = request.GET.get('username')
    type = request.GET.get('type')
    content = {'username':username,'type':type}
    return render(request,'index.html',context=content)

然后,在html文件中,通过模板语言中的if...else判断type类型,从而显示出不同的文字。

{% if type == '1' %}
    【普通会员】{{ username }}欢迎您!
{% elif type == '2' %}
    【超级会员】{{ username }}欢迎您!
{% elif type == '3' %}
    【管理员】{{ username }}欢迎您!
{% else %}
     <a href="{% url 'login' %}"> 登录 </a>
{% endif %}

注意:模板语言中,一般调用模板语句使用{% %},如果直接调用变量则使用{{ }}

四、模板语言中的for标签

当传递的数据是一个集合的时候,需要通过循环读取每一行记录。我们在views中传递一个集合给模板文件,html页面中使用模板语言的for标签依次将数据显示出来。

1.案例

我们从文件夹中读取学生信息,打包成由字典组成的列表,通过context参数传递给html页面并显示出来。
我们首先定义一个方法load_from_file用于读取文本文件并打包成列表。

def load_from_file(path:str):
    all_students = []
    infos = ['sno', 'name', 'gender', 'birthday', 'mobile', 'email', 'address']
    # 读取文件,将学生信息组装成[{]{}{}]
    try:
        with open(path, mode='r', encoding='utf-8') as fd:
            # 读取当前行
            current_line = fd.readline()
            # 判断当前行是否为空
            while current_line:
                # 去除换行符并获取单个学生信息列表
                student = current_line.replace("\n", "").split(",")
                # 组装学生信息字典
                temp_student = {}
                for index in range(len(infos)):
                    temp_student[infos[index]] = student[index]
                # 添加到总列表中
                all_students.append(temp_student)
                # 读取下一行
                current_line = fd.readline()
        # 返回总遵守信息
        return all_students
    except Exception as e:
        raise e

然后传递给html页面

def index(request):
    path = r"D:\Python\Project\DjangoDemo\app01\static\file\Student.txt"
    students = load_from_file(path)
    # 加载html页面
    return render(request,'index.html',context={'students': students})

在html页面中,我们表格使用bootstrap框架美化,

<link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">

使用模板语言for标签获取学生信息:

<tbody>
    {% for student in students %}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ student.sno }}</td>
            <td>{{ student.name }}</td>
            <td>{{ student.gender}}</td>
            <td>{{ student.birthday }}</td>
            <td>{{ student.mobile }}</td>
            <td>{{ student.email }}</td>
            <td>{{ student.address }}</td>
        </tr>
    {% endfor %}
</tbody>
效果演示
1.gif
2.使用DataTable展示数据

DataTables是基于jQuery的一个插件,用于显示数据表格。
在基本使用时,需要引用jquery.dataTables.css,脚本文件先引用jquery.js再引用jquery.dataTables.js,注意先后顺序。

<!-- 引用css -->
<link type="text/css" rel="stylesheet" href="{% static 'css/bootstrap.min.css'%}">
<link type="text/css" rel="stylesheet" href="{% static 'external/datatable/css/jquery.dataTables.css'%}">
<!-- js脚本 -->
<script src="{% static 'external/datatable/js/jquery.js' %}"></script>
<script src="{% static 'external/datatable/js/jquery.dataTables.js' %}"></script>

在html的table标签使用id属性后,在head标签结束前的script标签内添加脚本

 $(document).ready(function(){
        $('#表格id').DataTable();
    });

注意:在脚本中表格名前不用忘记加#,引入脚本的顺序不要写错。设置多语言可使用国际化功能详情可见datatable官网技术手册

效果演示:
使用了datatable的表格

五、模板语言常用过滤器

1. 格式

过滤器可以理解成为了实现某功能系统内置的函数。过滤器的书写格式为:

{{变量名|过滤器名称}}

如果使用参数则写成:

{{变量名|过滤器名称:"参数"}}
2.常见的过滤器

下面列举一些常见的过滤器:

{{value|capfirst}}  # 首字母大写
{{value|title}}  # 句子单词首字母大写
{{value|center:"15"}}  # 文字居中剩余填充
{{value|ljust:"10"}}  # 文字左对齐,剩余填充
{{value|rjust}}  # 文字右对齐,剩余填充
{{value|cut:" "}}  # 移除空白
{{value|date:"D d M Y"}}  # 日期格式化
{{value|default:"nothing"}}  # 默认空值
{{value|time:"H:i"}}  # 时间格式化
{{value|default_if_none:"nothing"}}  # None值默认
{{value|dictsort:"name"}}  # 字典排序
{{value|filesizeformat}}  # 文件大小格式化
{{value|first}}  # 序列的第一个值
{{value|last}}  # 序列的最后一个值
{{value|floatformat:3}}  #浮点精度
{{value|join:"~"}}  # 序列拼接
{{value|make_list}}  # 字符串转列表
{{value|length}}  # 序列长度
{{value|length_is:"4"}}  # 长度判断
{{value|lower}}  # 字符串转小写
{{value|upper}}  # 字符串转大写
{{value|randoom}}  # 序列中随机取值
{{some_list|slice:":2"}}  # 切片
{{value|striptags}}  # 去除标签
{{value|truncatechars:9}}  # 控制输出单词长度,超出省略号
{{value|wordcount}}  # 统计字数

注意:变量与过滤器名之间的竖线不要有空格,使用冒号引出参数即可。

最后

关于Django模板语言的部分,我们就介绍到这里,感谢大家的阅读~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容