• 模板


    模板

    1.模板语言

    母板:{% block title %}{% endblock %}
    
    子板:{% extends "master.html" %}  #只能继承一个模板
       {% include 'tag.html' %}    #可以继承多个
       {% block title %}内容{% endblock %}

     2.模板继承

    一个html问件只能继承一个模板

    master.html:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>
            {% block title %}{% endblock %}
    
        </title>
    
    <link rel="stylesheet" href="/static/commons.css">
        <style>
            .pg-header {
                height: 100px;
                background-color: rebeccapurple;
            }
         {% block css %}{% endblock %}    
        </style>
    
    
    </head>
    <body>
    
    
    <div class="pg-header">老男孩管理</div>
    
    {% block content %}{% endblock %}
    
    <script src="/static/jquery.js"></script>
    
    {% block js %}{% endblock %}
    
    </body>
    </html>
    母板语言

    test.html继承master.html:

    {% extends 'master.html' %}  #要extend母板的html问件
    
    {% block content %}
    
    <h1>用户管理</h1>
        <div class='c1';>
    <ul>
    
            <li>{{ u.name }}</li>
            <li>{{ u.age }}</li>
            <li>{{ u.gender }}</li>
    
    </ul>
        </div>
    {% endblock %}
    
    {% block title %}
        用户管理
    {% endblock %}
    
    
    
    {% block css %}
     .c1{background-color:red;}
    
    {% endblock %}
    子板语言

     3.模板里内置函数

    {{ item.event_start|date:"Y-m-d H:i:s"}}
    {{  name|truncatewords:"30" }}  #截取字符串name前30个字符
    {{ my_list|first|upper }}
    {{ name|lower }}    #字符串转换成小写

     示例:

    views.py

    def temp_func(request):
    
        name = 'HJASHasdvppljjf'
    
        return render(request,'temp_func.html',{'name':name,})

     temp_func.html  模板内置函数

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {{ name }}
    {{ name|lower }}  #用管道符进行字符串大小写的转换
    
    </body>
    </html>

     4.自定义模板函数simple_tag

    a、在app中创建templatetags模块

    b、创建任意 .py 文件,如:temp.py

     @register.simple_tag

    from django import template
    from django.utils.safestring import mark_safe
    
    register = template.Library()
    
    @register.simple_tag    #装饰器
    def func1(v1,v2,v3):
        return  v1 + v2 + v3
    
    
    @register.simple_tag
    def my_input(id,arg):
        result = "<input type='text' id='%s' class='%s' />" %(id,arg,)
        return mark_safe(result)

     c、在使用自定义simple_tag的html文件中导入之前创建的 temp.py 文件名

    {% load temp%}  #load temp.py文件
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {{ name }}
    {{ name|lower }}
    {%  func1  1  2  3 %}
    
    </body>
    </html>

     d、使用simple_tag

    {% load temp %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {{ name }}
    {{ name|lower }}
    {%  func1  1  2  3 %}    #函数名空格加参数
    {% my_input 'i1' 'hide' %}  #函数名空格加参数
    
    
    
    </body>
    </html>

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

    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app1'   #注册app
    ]

     @register.filter()

    如果想在模板函数里传参数与内置函数传参方法一样(my_list|first|upper)

    需要在自定义函数里面改成

    @register.filter  #把simple_tag改成filter
    def func2(str1,str2):  
    
        return str1+str2

     模板里

    {% load temp %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    
    {{ name }}
    {{ name|lower }}
    {%  func1  1  2  3 %}
    {% my_input 'i1' 'hide' %}
    {{ "stringg1"|func2:"string2" }}  #filter方法  不能有空格
    
    
    </body>
    </html>

    simple_tag与filter优缺点: 

    simple_tag:不能作为if条件但是参数可以有多个任意参数

    filter:可以作为if条件,但是参数不能任意,只能有两个不能有空格 

    {% if   "stringg1"|func2:"string2"  %} #filter可以作为if条件
    内容
    {%endif%}
  • 相关阅读:
    STL
    STL
    视觉里程计- 位姿
    opencv
    C++ 智能指针auto_ptr、shared_ptr、unique_ptr《三》-----智能指针的选择
    C++ 智能指针auto_ptr、shared_ptr、unique_ptr《二》-----为何unique_ptr优于auto_ptr
    C++ 智能指针auto_ptr、shared_ptr、unique_ptr《一》-----智能指针初识
    DBow中,TF-IDF了解
    网络爬虫(CrawlSpider)
    python3 获取cookie
  • 原文地址:https://www.cnblogs.com/sunhao96/p/8967272.html
Copyright © 2020-2023  润新知