Django之模板层

目录:

一:模板简介

 

不采用模板的缺陷:

  • 直接将HTML代码硬编码到python代码中,对页面设计进行的任何改变都必须对 Python 代码进行相应的修改。
  • Python 代码编写和 HTML 设计是两项不同的工作,耦合度高,可能需要不同开发人员完成。
  • 程序员编写 Python代码和设计人员制作模板两项工作同时进行的效率是最高的,可以进行相互引用。不必等待

二: 模版语法之变量

基本用法:{{ 变量 }}

-深度查询 .
-{{ 对象.方法 }} 方法不能传参数
-字典,列表 用 .

三 :模版之过滤器

-date
-default
-slice
...

四 :模版之标签

{%for %}
{%for a in 可迭代对象 %}
{{a.name}}
{{forloop}}
{%endfor%}

{% if 条件%}
{%elif 条件%}
{%else%}
{%endif%}

{% with %}:取别名

五 :自定义标签和过滤器

 示例:

1 确认app是否已经注册
2 在app下创建一个包:templatetags
3 在包中写mytag.py
4 from django.template import Library
5 register=Library()
6 标签:
    @register.simple_tag(别名)
    def mytesttag(a,b,c)
        return a+b+c
  过滤器
    @register.filter(别名)
    def mytestfilter(a,b)
        return a+b
7 使用标签
    {% load mytag%}
        标签
    {% mytesttag 参数1 参数2 参数3%}
        过滤器
    {{ 第一个参数|mytestfilter:'第二个参数'}}

 

六 :模版导入和继承

 

如何引入静态文件?

  1. 创建static文件夹目录
  2. 在setting文件内进行配置
STATIC_URL = '/static/'   该文件夹代表的是路由的根路径,不是项目目录的static文件夹
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,'static'),
]

模板的导入

  1. 在template文件夹下写好想要的模板
  2. 在需要引入模板的地方:
{% include '好看模板的名字.html' %}
相当于在要引入的文件内拷贝了模板文件内的HTML代码,模板内不用写head,body等标签;

模板的继承

  • 写一个母版,base.html(留一些block(盒子)),留的盒子越多,可扩展性就越高;
{% block 别名:top等 %}
  
{% endblock %}
  • 使用:
-在一个新的html中
        -{% extend 'base.html'%}
         扩写留的对应的盒子
            {% block top %}
                扩写的内容
            {% endblock %}                        
  • 注意:
1 扩写的时候,盒子的位置无所谓,只要名字对应正确,就会正确填充
2 盒子可以不扩写,不写就是原来的样子
3 如果要显示母版盒子中原来的东西,需要
    {{block.super}}----写在哪,原来的内容就放在哪

七:静态文件相关 

 

配置

--settings文件
STATICFILES_DIRS=[
os.path.join(BASE_DIR,'static'),
os.path.join(BASE_DIR,'templatetags'),
]

静态文件引入

  •  直接写死的路径:<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
  •  用static标签,动态生成全路径:
{% load static %}
  -
<link rel="stylesheet" href="{% static 'bootstrap-3.3.7-dist/css/bootstrap.css' %}">
  • 用get_static_prefix,只获取static的路径:
{% load static %}
<link rel="stylesheet" href="{% 用get_static_prefix %}bootstrap-3.3.7-dist/css/bootstrap.css">

inclusion_tag:返回html片段

步骤:

  1. 在setting文件中app是否注册
  2. templatetags模块:名字一定不能错
  3. 创建py文件(名字随意)
  4. from django.template import Library
  5. register=Library()
  6. 装饰器:@register.inclusion_tag('inclusiontag.html',name='别名'),第一个参数是要操作的模板
  7. 返回一个字典,字典中的值,可以在inclusiontag中使用
  8. 使用:
{%load 写的那个py文件%}

{% 函数名字 参数 参数 %}

 案例:

用inclusion_tag生成图书列表:传一个数,把数据库前几条数据显示出来

templatetags/my_tag.py

from django.template import Library
register = Library()
from app01 import models
#name为别名
@register.inclusion_tag('inclusiontag.html', name='lqz')
def mytest(value):
    #得到queryset对象
    values = list(models.Book.objects.values())
    #value为传入的要打印的个数
    ll = [values[i] for i in range(value)]
    print(ll)
    return {'ll': ll}
<tr>
    {% for foo in ll %}
        <td>{{ foo.id }}</td>
        <td>{{ foo.name }}</td>
    {% endfor %}

</tr>
<h1>{{ a }}</h1>
inclusiontag.html
{% extends 'base.html' %}
{% block left %}
    我是首页的内容
    <h1>我是index的h1标签</h1>
    我是首页的内容

{% endblock %}
{% block content %}
    {{ block.super }}
    <h1>我是index的内容</h1>
    {{ block.super }}
    
    #加载自定义my_tag
    {% load my_tag %}
    #传入参数
    {% lqz 3  %}

{% endblock %}
index.html

 

posted @ 2019-01-11 20:50  ChuckXue  阅读(481)  评论(0)    收藏  举报