django 实战篇之模板层

模板层

{{}} 变量相关

{%%} 逻辑相关

前端获取容器类型的数据统一使用 句点符(.)

两种给模板传递值的方式 return render(request,'index.html',{'name':'jason','age':'18'})

return render(request, 'index.html', locals()) # 这个方法虽然好用,但是会把后端函数所有的变量传给前端

django 实战篇之模板层_第1张图片

 

 

过滤器

取消转义(**): 前端: |safe 取消转义

后端: from django.utils.safestring import mark_safe

ss1 = mark_safe("

我是h1

")

django 实战篇之模板层_第2张图片

 

 

标签

{% for foo in l %}

{{ foo }}

{% endfor %}

 

{% if l %}

这个l有值


{% else %}

这个l没有值


{% endif %}

{% for foo in l %}
{% if forloop.first %}

这是我的第一次


{% elif forloop.last %}

最后一次了啊,不能再来了


{% else %}

继续嗨!


{% endif %}
{% empty %}

你给我的这个l是个空的,我没办法for循环


{% endfor %}

 

{% with d.hobby.2 as h %}

{{ h }} # 重命名的变量只能在with里面使用

{# {{ d.hobby.2 }}#}

{% endwith %}

django 实战篇之模板层_第3张图片

 

 django 实战篇之模板层_第4张图片

django 实战篇之模板层_第5张图片

 

 

自定义过滤器
必须做下面三件事:
1.必须在应用下新建一个名为templatetags的文件夹
2.在该文件夹下创建一个任意名的py文件
3.在该文件内必须先写下面两句话
from django import template
resgiter = tmplate.Library()
django 实战篇之模板层_第6张图片

django 实战篇之模板层_第7张图片

 


# 自定义过滤器
@register.filter(name='baby')
def my_sum(a,b):
return a+b
使用:
必须先加载过来
{% load my_tag %}
之后的用法跟自带的过滤器用法相同
{{ xx|baby:10 }}

 

 

自定义inclusion_tag 调用自定义的inclusion_tag能够返回一段html代码

 

@register.inclusion_tag('login.html')

def get_html(n): l = []

for i in range(n):

l.append('第%s项'%i)

return {'l':l}

django 实战篇之模板层_第8张图片

django 实战篇之模板层_第9张图片

 

 

 

 

login.html 中文件





Title



    {% for foo in l %}
  • {{ foo }}

  • {% endfor %}



最后在index.HTML中执行下面的方法
{% get_html 5 %}
得到五条记录
第0项
第1项
第2项
第3项
第4项

django 实战篇之模板层_第10张图片

django 实战篇之模板层_第11张图片

 

自定义标签 过滤器 inclusion_tag都是为了能够调用它返回相应的结果
区别:
自定义标签和过滤器返回的仅仅是数据而已
而我的inclusion_tag返回的是一段html代码而已!!!

 

 

 

模板的继承与导入 模板的继承:

需要在你的主页面通过block划定多片区域,给继承了主页面的子页面选择使用哪块区域

子页面中如何使用: {% extends 'home.html' %} # 先将主页面继承过来 通过block块的名字,指定修改哪一片区域 {% block '区域名字' %}

 {% endblock %}

 

{% block content %}

登录页面

{{ block.super }}

username:

password:

{% endblock %}

 

 

在模板中指定一片区域命名为content

还可以通过{{ block.super }}继续使用主页面某一个块里面的内容

 

模板里面定义的块儿越多,可扩展性越高 通常情况下模板都有三块区域

{% block css %}

{% endblock %}

{% block content %}

{% endblock %}

{% block js %}

{% endblock %}

模板的导入的应用场景

你花了好长时间搭建了一个特别好看的form表单(某一个区域)

使用方式: {% include 'demo.html' %} 相当于一个模块 可以导入

 

转载于:https://www.cnblogs.com/tangda/p/10719703.html

你可能感兴趣的:(django 实战篇之模板层)