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.com/zh-hans/2.2/ref/templates/builtins/

  • 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.com/zh-hans/2.2/howto/custom-template-tags/

示例:
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 %}
posted @ 2020-04-13 11:55  leafgood  阅读(452)  评论(0编辑  收藏  举报