06-模板

发布时间 2023-03-28 18:35:34作者: 测试圈的彭于晏

模板引用

# 官网: https://www.djangoproject.com/
# 首先从子应用中寻找 templates ,再去根目录下找,找不到会报错
# 在templates中创建app02文件夹-->创建index.html
  <body>
    <table border="1" cellspacing="0" width="80%">
        {% for user in users %}
            <tr>
            <td>
                {{ user.username }}
            </td>
            </tr>

        {% endfor %}
    </table>
  </body>
def index(request):
    users = [{"username": "coco"}, {"username": "lili"}]
    # 使用模板引擎
    return render(request, "app02/index.html", context=locals())  # locals()相当于变量转换成字典

模板渲染

# loader 渲染原理
def load_template(request):
    # 1. 加载模板文件,生成模板对象
    obj=loader.get_template("app02/index.html")
    print(obj,type(obj))
    # 2. 渲染
    res= obj.render({"name":"coco"})
    # 渲染的结果生成html源文件(字符串)
    print(res)
    return HttpResponse(res)


# render加载和渲染一块进行,是一种快捷方式
    return render(request,'app02/index.html',context={"name":"coco"})

模板语法

1. 变量

def handle_var(request):
    num = 10
    name = "coco"
    students = [10, 2, 3, 4]
    student = {"name": "lili", "age": 20}
    return render(request, "app02/变量.html", locals())
<body>
{# 变量 #}
{# 复杂类型的访问,可以使用点,但不能使用下标 #}
{{ num }}
{{ name }}

{# students[0] 不能使用下标#}
{{ students.0 }}

{{ student.name }}

</body>

2. 过滤器

def handle_filter(request):
    num = 10
    name = "coco"
    # age = None
    t1=datetime.now()
    content="<h1>自动转义功能,会把<和>转义成普通字符</h1>"
    return render(request, "app02/过滤器.html", locals())
<body>
{# 过滤器 : 加工 #}
{{ num|add:"10" }} {# 将一个数 +10 在替换显示 #}
{{ age|default_if_none:"你好" }} {# 如果这个变量为空,就显示 你好(缺省值) #}
{{ age|default:"ok" }}{# 如果变量不存在,就显示 ok #}
{{ t1|date:"Y-m-d H" }} {# 格式化时间 #}

{% autoescape off %} {# 加上这个就会按照标签解释 #}
    {{ content }}
{% endautoescape %}
</body>

3. 自定义过滤器

# 1. 在子应用中创建文件夹 templatetags (固定文件名)

# 2. 在 templatetags 文件夹下 创建 mytags.py 文件
    from django import template
    # 建立模板对象
    register = template.Library()
    @register.filter(name="sub1")  # 在模板中调用的名字
    def sub(value):  # 参数最多两个
        return value - 1

# 3. html模板中调用
    # 顶部引用
    {% load mytag %}

    #  自定义过滤器 
    {{ 5|sub1 }}

4. django内置标签

def handle_tag(request):
    l1 = [1, 2, 3, 4, 5, 6]
    num = 30
    return render(request, "tag.html", locals())
# if表达式
{# 不可以使用小括号 #}
{# 构造复杂条件需要if嵌套 #}
{% if num < 10 %}
    小于10
{% elif num < 20 %}
    小于20
{% else %}
    其他
{% endif %}


# for循环
{#{% for value in l1 %}  {# 正向遍历 #}
{% for value in l1 reversed %}  {# 反向遍历 #}
    {{ forloop.counter0 }}---{{ value }}   {# {{ forloop.counter0 }}:下标从开始 #}
{% empty %}  {# 没有数据的时候显示 #}
    数据不存在
{% endfor %}