zoukankan      html  css  js  c++  java
  • Django 模版语法

    一.简介

    模版是纯文本文件。它可以产生任何基于文本的的格式(HTML,XML,CSV等等)。

    模版包括在使用时会被值替换掉的 变量,和控制模版逻辑的 标签

    {% extends "base_generic.html" %}
    
    {% block title %}{{ section.title }}{% endblock %}
    
    {% block content %}
    <h1>{{ section.title }}</h1>
    
    {% for story in story_list %}
    <h2>
      <a href="{{ story.get_absolute_url }}">
        {{ story.headline|upper }}
      </a>
    </h2>
    <p>{{ story.tease|truncatewords:"100" }}</p>
    {% endfor %}
    {% endblock %}

    1.变量

    {{ variable }}
    {#如果后台 渲染传过来的是字典格式的数据 那么前端页面解析值 dict={"k1":"v1"} 假设传的是{"dict": dict} 前端页面取值 .字典key值#}
     
    <h1>{{dict.k1}}</h1>

    2.过滤器

      可以通过使用 过滤器来改变变量的显示

    格式:

    {{ name|lower }}

    过滤器参数;

    {{ item.content |truncatewords:30 }}  <!-- 只显示 content 变量的前30个词 -->

    default

    {{ value|default:"nothing" }}   <!--如果一个变量是false或者为空,使用给定的默认值。否则,使用变量的值-->

    length

    返回值的长度。它对字符串和列表都起作用

    {{ value|length }}

    filesizeformat

    将该数值格式化为一个 “人类可读的” 文件容量大小 (例如 '13 KB', '4.1 MB', '102 bytes', 等等)
    {{ value|filesizeformat }}

    add

    把add后的参数加给value

    {{ value|add:"2" }}  <!--如果 value 为 4,则会输出 6.-->

    capfirst

    将变量首字母变大写

    {{ value|capfirst }}  <!--如果value是test过滤后转为Test-->

    cut

    移除value中所有的与给出的变量相同的字符串

    {{ value|cut:" " }}

    dictsort

    根据指定的key值对列表字典排序,并返回

    {{ value|dictsort:"name" }}
    {% for book in books|dictsort:"author.age" %}
        * {{ book.title }} ({{ book.author.name }})
    {% endfor %}

    如给定值为:

    [
        {'title': '1984', 'author': {'name': 'George', 'age': 45}},
        {'title': 'Timequake', 'author': {'name': 'Kurt', 'age': 75}},
        {'title': 'Alice', 'author': {'name': 'Lewis', 'age': 33}},
    ]

    那么结果为:

    * Alice (Lewis)
    * 1984 (George)
    * Timequake (Kurt)

    random

    随机返回一个值

    {{ value|random }}
    如果 value 是 列表 ['a', 'b', 'c', 'd'], 可能输出的是 "b"

    slice

    切片

    {{ some_list|slice:":2" }}

    如果 some_list 是 ['a', 'b', 'c'], 输出结果为 ['a', 'b']

    truncatewords

    字符串截断

    {{ value|truncatewords:2 }}

    如果 value 是 "Joel is slug",输出  "Joel is ...".

    二.自动HTML转义

    默认情况下,Django 中的每个模板会自动转义每个变量的输出。明确地说,下面五个字符被转义:

    • < 会转换为&lt;
    • > 会转换为&gt;
    • ' (单引号) 会转换为&#39;
    • " (双引号)会转换为 &quot;
    • & 会转换为 &amp;

    如何关闭

    要控制模板上的自动转义,将模板(或者模板中的特定区域)包裹在autoescape标签 中

    {% autoescape off %}
        Hello {{ name }}
    {% endautoescape %}

    autoescape标签接受on 或者 off作为它的参数。有时你可能想在自动转义关闭的情况下强制使用它。下面是一个模板的示例:

    Auto-escaping is on by default. Hello {{ name }}
    
    {% autoescape off %}
        This will not be auto-escaped: {{ data }}.
    
        Nor this: {{ other_data }}
        {% autoescape on %}
            Auto-escaping applies again: {{ name }}
        {% endautoescape %}
    {% endautoescape %}

    自动转义标签作用于扩展了当前模板的模板,以及通过 include 标签包含的模板,就像所有block标签那样。例如:

    {% autoescape off %}
    <h1>{% block title %}{% endblock %}</h1>
    {% block content %}
    {% endblock %}
    {% endautoescape %}
    {% extends "base.html" %}
    {% block title %}This &amp; that{% endblock %}
    {% block content %}{{ greeting }}{% endblock %}

    三.自定义simple_tag

    自定义simple_tag

    {% load humanize %}
    
    {{ 45000|intcomma }}

    load标签可以接受多个库名称,由空格分隔。例如

    {% load humanize i18n %}

    5.1 自定义标签代码

    自定义模板标签和过滤器必须位于Django 的某个应用中。如果它们与某个已存在的应用相关,那么将其与应用绑在一起才有意义;否则,就应该创建一个新的应用来包含它。

    这个应用应该包含一个templatetags 目录,和models.pyviews.py等文件处于同一级别目录下,如果目录不存在则创建它——不要忘记创建__init__.py 文件以使得该目录可以作为Python 的包。在添加这个模块以后,在模板里使用标签或过滤器之前你将需要重启服务器。新建 PY文件

    切记:目录名一定要是templatetags

    自定义simple_tag
    在templatetags目录下的py文件中写:
     
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from django import template
    from django.utils.safestring import mark_safe
     
    register = template.Library()
     
    @register.simple_tag
    def my_simple_time(v1,v2,v3):
        return  v1 + v2 + v3

    在HTML中写:

    {% load xx %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
     
    {% my_simple_time 1 2 3%}
     
    </body>
    </html>

    自定义simple_tag的html中不能用于if条件作为判断,so引出了自定义过滤器函数

    自定义过滤器函数

    (最多俩个参数,html中可以有if条件语句)
    自定义的过滤器就是一个带1,2个参数的python函数,一个参数放变量值,一个用来放选项值,比如{{ var|remove:"bar" }}, var是变量值,"bar"是选项值。
    在templatetags目录下的py文件中写:
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    from django import template
    from django.utils.safestring import mark_safe
    register = template.Library()
     
    @register.filter
    def detail3(value,arg):
        allcount, remainder = arg.split(',')
        allcount = int(allcount)
        remainder = int(remainder)
        if value%allcount == remainder:
            return True
        return False

    在HTML中写:

    {% load xx %}
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
     
    {{  23|detail4:"4,0" }}
     
    {% if  23|detail4:"4,0" %}
    <h1>123</h1>
    {% endif %}
     
    </body>
    </html>
  • 相关阅读:
    【JAVA与C#比较】其它
    C#和java之间的一些差异与共性
    C#与Java的语法差异
    关于npm本地安装模块包(node_modules),安装不了的问题
    vue
    vue
    vue
    vue
    v
    vue -model
  • 原文地址:https://www.cnblogs.com/Erick-L/p/7100379.html
Copyright © 2011-2022 走看看