Django中的T——模板

模板Templates

模板文件夹

Templates文件夹存放模板文件,可以使用模板语法,注意static文件夹里面html文件不能使用模板语法

Templates可以是自定义的名字,在子应用目录下需要注册,在工程目录下需要在settings.py里注册,然后将文件夹标记为Template Folter。

Django默认的模板配置

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    }
]

在views里面返回需要渲染在返回,用render()方法,return render(request, 'Template.html', locals())

模板语法

结构标签

  • block
    • 定义一个块,子类标签中引用。
  • extends
    • 加载父类的html文件{% extends 'base.html' %}
  • include
    • 尽量不要使用

使用block标签来加载静态文件:

{% load static %}<!--不可省略-->
<!--使用block把html代码分割,extCSS是自定义命名-->
{% block extCSS %}
    {{ block.super }}<!--继承父类block的内容-->
{% endblock %}

使用block + extends,化零为整,include由零化一

父标签base.html中定义一个block

{% block header %}
<h3>
        this is a header block
</h3>
{% endblock %}

在子标签home.html中继承

{% extends 'base.html' %}
{% block header %}
{# 这是一个模板注释,网页中检查元素是不可见的 #}
{% 这是一个多行模板注释,也是不可见的。默认子标签的内容会覆盖付标签的内容,通过super来继承福标签内容 %}
	{{ block.supper }}
<h3>
    this is a child html
</h3>
{% endblock %}

变量语法

使用点语法来获取变量,在视图中返回json或者字典数据,在标签中通过key来获取。

扫描二维码关注公众号,回复: 6514720 查看本文章
<p>{{ params }}</p>
<p>{{ param.name }}</p>
<!-- 获取列表里面的单个元素,这里是一个用户对象 -->
<p>{{ user_list.1 }}</p>
<!-- 获取对象的属性 -->
<p>{{ user_list.2.name }}</p>
<!-- 可以在试图函数里面使用__str__将对象转化为字符串 -->

使用点语法来引用对象方法:

<p>biger:{{ dic.name.upper }}</p>

标签语法

形如{% tag %}的语句,就是Django的标签语法,可以实现复杂的逻辑,一些标签需要开始和结束标签

  1. for循环
<h3>循环取值1</h3><hr>
{% for item in person_list %}
    <p>{{ item.name }},{{ item.age }}</p>
<!-- 一个可选的empty标签,如果没有元素是展示 -->
{% empty %}
    <p>sorry,no person here</p>
{% endfor %}

<h3>循环取值2:倒序</h3><hr>
{% for item in person_list reversed %}
    <!--序号从1开始-->
    <p>{{ forloop.counter }}----->{{ item.name }},{{ item.age }}</p>
    <!--序号从0开始-->
	<p>{{ forloop.counter0 }}----->{{ item.name }},{{ item.age }}</p>
	<!-- 序号倒序 -->
	<p>{{ forloop.revcounter }}----->{{ item.name }},{{ item.age }}</p>
{% endfor %}

<h3>循环取值3:字典</h3><hr>
{% for k,v in d.items %}
    <p>{{ k }},{{ v}}</p>
{% endfor %}
  1. if标签
{% if i > 300 %}
    <p>大于{{ i }}</p>
{% elif i == 200  %}
    <p>等于{{ i }}</p>
{% else %}
    <p>小于{{ i }}</p>
{% endif %}
  1. with标签

使用一个简单地名字缓存一个复杂的变量,当你需要使用一个“昂贵的”方法(比如访问数据库)很多次的时候是非常有用的

{% with total=business.employees.count %}
	<!-- 复数显示及国际化使用pluralize -->
    {{ total }} employee{{ total|pluralize }}
{% endwith %}
  1. csrf_token

用来标记跨站请求伪造保护

{% csrf_token %}
  1. 转义开关

作用:views.py传过来的字典值是一串html代码,默认是按字符串输出的,如果转义后则会编译成html格式在页面输出

  • safe方法转义
{ contents|safe }<!--添加safe完成转义,不建议-->
  • 包裹起来转义
<!--off是关闭转义,on是开启-->
{% autoescape off %}
  {{ content }}  
{% endautoescape %}

渲染模板

模板渲染返回,可以使用render方法,也可以使用HttpResponse来实现render的功能

# 首先加载模板文件
# 返回<class 'django.template.backends.django.Template'>
template = loader.get_template('Hello.html')
# 渲染模板
result = template.render(context={"msg": "okba"})
# 用HttpResponse返回
return HttpResponse(result)

猜你喜欢

转载自blog.csdn.net/qq_27114273/article/details/92397609