Django Web开发之模板

Posted leafgood

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django Web开发之模板相关的知识,希望对你有一定的参考价值。

1.模板文件

模板文件包括两部分:

  • 静态文件:css,js,html
  • 动态内容:动态去产生一些网页内容,这需要通过模板语言来实现。

2.模板文件的使用

  • 加载模板文件 ,获取模板文件的内容,产生一个模板对象。
  • 定义模板上下文 ,给模板文件传递数据。
  • 模板渲染产生html页面内容 render,用传递的数据替换相应的变量,产生一个替换后的标准的html内容。

2.1常用语法

  • 变量相关的用{{ }}
  • 逻辑相关的用{% %}

2.2模板变量

模板变量名是由数字,字母,下划线和点组成的,不能以下划线开头。
使用模板变量:{{模板变量名}},

2.3 模板变量的解析

使用模板变量时,.前面的可能是一个字典,可能是一个对象,还可能是一个列表。
例如:{{ dogs.name }}
1)把dogs当成一个字典,把name当成键名
2)把dogs当成一个对象,把name当成属性
3)把dogs当成一个对象,把name当成对象的方法
模板按照上面的顺序进行解析。

2.4 模板标签

语法: {% 代码段 %}

  • for 循环
{% for x in 列表 %}
    ....
{% endfor %}
  • if
{% if ... %}
    ....
{% elif ... %}
    ....
{% endif  %}

示例

            {% for i in books %}
                    <tr>
                        <td>{{ i.id}}</td>
                        <td>{{ i.title }}</td>
                        <td>{{ i.author  }}</td>
                    </tr>
             {% endfor %}
        <select>
        {% for i in books %}
            {% if i.id == 1 %}
                <option selected="selected" value="{{ i.id }}">{{ i.title }}</option>
            {% else %}
                <option value="{{ i.id }}">{{ i.title }}</option>
            {% endif %}
        {% endfor %}
        </select>

2.5 filter

在Django的模板语言中,通过使用 filter 来改变变量的显示。

语法: {{ value|filter_name:参数 }}

Django常用内置过滤器

参考文档:https://docs.djangoproject.co...
  • default
#如果一个变量是false或者为空,使用给定的默认值 
{{ value|default:"hello"}}
  • filesizeformat
# 将值格式化为一个对人友好可读文件大小 (例如 \'200 KB\', \'10.5 MB\', \'1.8 GB \', 等等)
{{ value|filesizeformat }}
  • date日期的格式化
{{ value|date:"Y-m-d H:i:s"}}
  • slice切片
{{value|slice:"1:-1"}}
  • safe

在模板上下文中的html标记默认是会被转义的,使用safe可以关闭这种转义。

{{ value|safe}}

2.6 自定义过滤器

自定义过滤器只是带有一个或两个参数的Python函数

参考文档:https://docs.djangoproject.co...

示例:
1.django项目mysite,app应用book_show, 自定义other_filter.py,位置如下

book_show/
    __init__.py
    models.py
    templatetags/
        __init__.py
        other_filter.py
    views.py

2.other_filter.py,如下

from django import template
register = template.Library()

@register.filter(name="cut")
def str_pre(value, pre_str):
    """添加前缀"""
    return "{}-{}".format(pre_str, value)  

3.使用


{# 首先导入自定义filter那个文件,之后就可以正常使用了 #}
{% load other_filter %}

以上是关于Django Web开发之模板的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中显式重置模板片段缓存?

web框架之--Django基础入门

Python之Web开发--Django框架

Django4.1_template之变量和过滤器

Python开发第二十一篇:Web框架之Django基础

Python开发第二十一篇:Web框架之Django基础