django|django 实战篇之模板层

模板层 ? {{}} 变量相关
? {%%} 逻辑相关 ?
前端获取容器类型的数据统一使用 句点符(.) ?
两种给模板传递值的方式return render(request,'index.html',{'name':'jason','age':'18'})
return render(request, 'index.html', locals()) # 这个方法虽然好用,但是会把后端函数所有的变量传给前端
django|django 实战篇之模板层
文章图片



过滤器 ?
取消转义(**): ? 前端: ? |safe 取消转义 ?
后端: ? from django.utils.safestring import mark_safe ?
ss1 = mark_safe("我是h1")
django|django 实战篇之模板层
文章图片



标签 {% 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|django 实战篇之模板层
文章图片


django|django 实战篇之模板层
文章图片

django|django 实战篇之模板层
文章图片



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

django|django 实战篇之模板层
文章图片



# 自定义过滤器
@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|django 实战篇之模板层
文章图片

django|django 实战篇之模板层
文章图片





login.html 中文件




Title - 锐客网



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

  • {% endfor %}



最后在index.HTML中执行下面的方法
{% get_html 5 %}
得到五条记录
第0项
第1项
第2项
第3项
第4项
django|django 实战篇之模板层
文章图片

django|django 实战篇之模板层
文章图片

django|django 实战篇之模板层
文章图片


自定义标签 过滤器 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' %} 相当于一个模块 可以导入

【django|django 实战篇之模板层】转载于:https://www.cnblogs.com/tangda/p/10719703.html

    推荐阅读