Django-3-模板

一、模板

在传统开发中,模板是在后端渲染,然后在浏览器中展示的。

1.1 模板中变量

{{ 后端传递的变量值}}

如果变量不存在,则会默认是空字符串。

1.2 方法不能有参数

{{str}}
{{str.upper}}

1.3 列表的索引不能为负

item = ['c','b','a']
{{item.2}}

1.4 模板中的标签

{%  tag %}
  • 加载外部传入的变量

  • 在输出中创建文本

  • 控制循环或逻辑

1.5 if

1.5.1 单分支

{% if 表达式 %}
   语句
{% endif 表达式 %}

1.5.2 双分支

{% if 表达式 %}
    语句
{% else %}
    语句
{% endif 表达式 %}

1.5.3 多分支

{% if 表达式 %}
    语句
{% elif %}
    语句
{% else %}
    语句
{% endif 表达式 %}

1.5.4 and or not

{% if adafsa and sdfdsf %}
    语句
{% endif 表达式 %}
{% if not mylist %}
    语句
{% endif 表达式 %}
{% if adafsa or sdfdsf %}
    语句
{% endif 表达式 %}

1.5.5  in 和 not in

{% if 'a' in 'abcde' %}
    语句
{% endif 表达式 %}

1.6 for

1.6.1 循环

{% for 变量 in 列表 %}
    语句
{% empty %}
    语句
{% endfor %}

当列表为空或不存在时,执行empty之后的语句。

1.6.2 获取索引

{{ forloop.count }} # 当前是第几次循环,从1开始
{% for item in mylist %}
{{forloop.counter}}:{{item}}
{% endfor %}
{{forloop.counter0}} 当前是第几次循环,从0开始
{{ forloop.revcounter}} 当前是第几次循环,倒数,到1停止
{{ forloop.revcounter0}} 当前是第几次循环,倒数,到0停止
{{forloop.first}} 是否是第一个,返回真假
{{forloop.last}} 是否是最后一个,返回真假

1.7 注释

1.7.1 单行注释

{# 注释内容 #}

1.7.2 多行注释

{% comment %}
    内容
{% endcomment %}

1.8 过滤器

{{ var | 过滤器 }}
{{value | add:2}} # 显示前给值+2
{{ name | lower}} # 字母转小写
{{ name | upper}} # 字母转大写
{{dataval | date:'y-m-d'}} # 日期格式转换

1.9 HTML转义

把接收到的数据当做普通字符串处理,还是当做HTML渲染,这是一个问题。

1.9.1 渲染成HTML

{{ htmlstr | safe }}

1.9.2 关闭自动转义

{% autoescape off %}
   htmlstr
{% endautoescape off %}

1.10 模板继承

1.10.1 block

{% block XXX%}
   CODE
{% endblock%}

1.10.2 extends

继承,写在开头的位置

{% extends '父模板路径' %}

1.10.3 include

加载模块进行渲染

{% include '模板文件' %}

1.10.4 获取父模板block中的内容

{{ block.super }}

二、变量

def index(request):
    data = {
        'name':'python',
        'age':10,
        'likes':['抽烟','喝酒','烫头'],
        'address':{
            'city':'北京',
            'area':'东城区'
        }
    }

    return render(request,'index.html',data)
<html>
  <body>
      <p>name:{{name}}</p>
    <p>age:{{age}}</p>
    <p>likes:{{likes}}</p>
    <p>likes.1:{{likes.1}}</p>
    <p>address:{{address}}</p>
    <p>address.city:{{address.city}}</p>
  </body>
</html>

三、标签

<html>
  <body>
      {% if age >= 20 %}
        <h2>你是大人了</h2>
    {% endif %}
  </body>
</html>

四、for

<html>
  <body>
      {% for like in likes %}
        <h2>{{like}}</h2>
    {% endfor %}
  </body>
</html>

五、模板继承

5.1 父模板

<html>
  <head>
        {% block extcss %}
      引入css
    {% endblock %}
  </head>
  <body>

    {% block header %}
       头部
    {% endblock %}

    {% block content %}
       内容区
    {% endblock %}

    {% block extjs %}
       引入js
    {% endblock %}
  </body>
</html>

上面的父模板,在加载的时候,是不会显示的

5.2 子模板

{# 继承父模板 #}
{% extends 'block.html' %}

 {% block header %}
    这里写的内容,最终会渲染到父模板的header为止
  {% endblock %}

渲染子模板的时候,就会显示父模板的信息。

六、使用Jinja2

6.1 安装jinja2

pip install jinja2

6.2 配置

在settings.py所在目录中创建jinja2.env.py文件,并写入如下内容

from django.templatetags.static  import static
from django.urls import reverse
from jinja2 import Environment

def environment(**options):
    env = Environment(**options)
    env.globals.update({'static': static,'url' : reverse,
    return env

6.3 在settings.py文件中配置jinja2模板引擎

# 使用Jinja2模板引警
{
    'BACKEND':'django.template.backends .jinja2.Jinja2
    '
DIRS': [],
    '
APP_DIRS': True,
    OPTIONS'
: {
        #这里要添加environment,并指定到jinja2_env文件中的
        'environment' environment':'demo2.jinja2_env.environment',
        '
context_processors': [
            '
django.template.context_processors.debug
            'django.template.context_processors.request',
            'django.contrib.auth.context_processors.auth',
            'django.contrib,messages.context_processors.messages'
        ]
    }
}


原文始发于微信公众号(Python之家):Django-3-模板

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/198200.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!