django4-模板进阶

1.模板系统的语法css

  引用变量数据: {{  }}html

  标签逻辑操做:{%...%}后端

 

2.变量app

  变量名由字符数字下划线组成 ,能够执行由视图函数传过来的对象的方法和属性 ,可是视图函数中若是使用 ' . ' 执行对象的方法没法传参函数

#views.py
def test(request):
lst = []
dit = {}

class person:
def __init__(self, name, age):
self.name = name
self.age = age

def echo(self):
return '{}*{}岁'.format(self.name, self.age)

def __repr__(self):
return self.name
p1 = person('qgw', 12)
p2 = person('gwq', 15)
lst.append(p1)
lst.append(p2)

dit['p1'] = p1
dit['p2'] = p2
return render(request, 'test-n.html', {'l': lst, 'd': dit,'p1':p1})
#模板语法 ,不能使用括号() ,因此没法传参

列表
{# 取列表中的第一个参数,与后端索引相似 #}
{{ l.0 }}

字典  
若是有键是keys ,那么优先级为先找键 ,再去找属性方法
{# 根据字典的key取值 #}
{{ d.name }}
{# 字典的方法items取出kv对 ,keys取出全部的k ,values取出全部的v #}
{{ d.items }}  {{ d.keys }}  {{ d.values }}

对象相关
{# 友好打印列表,返回一堆内存地址,这个调用了__repr__方法 ,重构repr便可 #}
{{ p1 }}
{# 取对象的name属性 #}
{{ p1.name }}
{# .操做只能调用不带参数的方法 #}
{{ p1.echo}}  

3. 变量二次处理oop

  变量可使用管道作二次处理 ,过滤器是一些已经定义好的处理方法 ,管道能够有多个处理屡次url

  语法: {{ 变量|filter_name:参数 }}spa

  default   #给变量设置默认值设计

  add     #把变量拼接与参数code

  length    #把变量的长度打印出来 ,不能对int类型操做

  slice    #切片

  first     #第一个元素

  last     #最后一个元素

  date    #将日期格式化

  truncatechars  #保留指定长度字符串 ,后续变为...

  safe    #若是是代码 ,不加safe默认是不执行的 ,以字符串显示 ,加了这个就能够执行

 

4.标签逻辑操做

  经常使用逻辑有 for if with csrf_token url ,可使用tab键补全格式

  1) for循环

    for循环内部可使用的一些方法

    forloop.counter      #打印本次循环是第几回

    forloop.counter0       #打印本次循环是第几回(从0开始)

    forloop.revcounter       #倒叙打印本次循环第几回

    forloop.revcounter0     #倒叙打印本次循环第几回(从0开始)

    forloop.first        #若是是第一次循环 ,返回true

    forloop.last        #若是是最后一次循环, 返回false

    forloop.parentloop     #打印外层循环 (多层循环使用) ,能够在子循环中使用父循环的forloop的方法

    empty           #当整个for循环中empty以上代码没有生成 ,则执行empty下面的代码

{% extends 'base.html' %}
{% block body1 %}
    <table class="table table-bordered">
        {% for objlst in data %}
            {% for obj in objlst %}
                <tr>
            {#将外层循环第一次的内容加上info颜色#}
                    <td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>
                    <td>{{ obj.age }}</td>
                    <td>{{ forloop.counter }}</td>
                </tr>
            {% endfor %}
        {% empty %}
            <h1>isnone</h1>
        {% endfor %}
    </table>
{% endblock %}

  2)if判断

    if运用比较灵活能够写在一个标签中 ,控制标签的属性 如: "<td {% if forloop.parentloop.first %}class='info'{% endif %}>{{ obj.name }}</td>"

{% extends 'base.html' %}
{% block body1 %}
    {% if 10 >= 9|add:2 %}        #add是加法和减法
        <h2>1</h2>
        {% else %}
        <h2>2</h2>
    {% endif %}
{% endblock %}

  3)with别名

     with别名区域 ,在指定区域中一个变量能够经过别名方式引用

{% extends 'base.html' %}
{% block body1 %}
    {{ zheshiyige_obj.name }}

{#别名方式#}
    {% with zheshiyige_obj as obj %}
        {{ obj.name }}
    {% endwith %}
{% endblock %}

  

5.模板与继承

  模板: 就是一个普通的html页面 ,可是是公共部分 ,有效避免代码重复 ,写多个不一样的block块 ,子页面中逻辑的内容放入block中 ,一般css和js的引用也会设计一个block

  子页面继承模板方法 :

    页面第一行{% extends '模板.html' %}

    {% block 块名 %}

    {% endblock %}

6.组件

  组件也是避免代码重复 ,是一小块代码 ,须要给不少页面使用

  组件使用 {% include 'html页面' %}

#zj.html
<h2>这里是oooo</h2>

#其余页面引用
{% include 'zj.html' %}

 

7.静态文件配置名

  和路有别名做用差很少 ,为了防止static静态目录名的变动 ,咱们将静态目录起个别名放在settings中 ,全部模板中引用静态文件的时候 ,直接使用静态文件别名或相对路径便可

#settings.py
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, 'static')     #指定静态文件的根目录
]

#html页面引用静态文件
{% load static %}    #导入静态文件

{% static '相对路径文件名' %} #引用静态文件
    
相关文章
相关标签/搜索