django的模板语言

目录

1、变量

{{变量}}

2、标签

{% if %}

{% ifequal %}

{% for %}

{{ forloop }}

3、过滤器

{{ | }}


1、变量

{{变量}}

1、传入前端的变量最外层一定是一个字典

2、具体的变量可以是 字符串、列表、字典等类型

3、变量通过.方法可以调用自己的无参数方法、索引

4、如果变量是字典也可以通过.键调用值

 

可以自己写入代码,试着看一下变量的显示效果

首先,打开django目录下的views.py文件

django的模板语言

然后代码如下

from django.http import HttpResponse
import time
from django.template import Template, Context
def variable(request):
    tem = Template(
        """
        <p>
            变量常规用法:{{var}}
        </p>
        <p>
            变量列表:{{var1}}
        </p>
        <p>
            索引获取列表直接在列表后面加小数点索引:{{var1.1}}
        </p>
        <p>
            变量的样式:{{var.upper}}
        </p>
        <p>
            变量字典:{{var2}}
        </p>
        <p>
            变量字典取值直接在字典后面加小数点键名:{{var2.age}}
        </p>
        
        
        
        
        """
    )
    data = Context({
        "var": "lee",
        "var1": [1, 2, 3, 4],
        "var2": {"name": "张三", "age": 18}

    })
    result = tem.render(data)
    return HttpResponse(result)

然后打开urls.py文件

django的模板语言

django的模板语言

先导入views文件,然后在这个文件里的urlpatterns列表中添加

    path('var/',variable),

其中var/的意思是识别地址栏为var时,调用variable

然后开启服务器,在浏览器的地址栏中输入

就可以看到刚刚在views里内容的显示效果了

django的模板语言

2、标签

{% if %}

1、判断指定条件true或者false,通常判断一个变量是否存在或者为真

2、{% if %} 标签需要 {% endif %} 标签进行闭合

3、{% if %} 可以有 {% else %}

 

在views文件中, 增加以下代码

def label_if(request):
    """
    1、判断指定条件true或者false,通常判断一个变量是否存在或者为真
    2、{% if %} 标签需要 {% endif %} 标签进行闭合
    3、{% if %} 可以有 {% else %}

    """
    tem = Template(
        """
        {% if name %}
            <p>欢迎登陆 {{name}}</p>
        {% else %}
            <p>
            <a href='#'>
            请登录
            </a>
            </p>
        {% endif %}
        """
    )
    data = Context({
        "name": "hhh",
    })

    result = tem.render(data)
    return HttpResponse(result)

然后在urls文件中也更新相关内容

 path('if/',label_if),

打开浏览器,输入地址,就可以看到效果了

django的模板语言

如果我们在views文件中if判断为假,则不生效

django的模板语言

{% ifequal %}

1、判断两个量是否相等,通常用于比较

2、{% ifequal %} 标签需要 {% endifequal %} 标签进行闭合

3、{% ifequal %} 可以有 {% else %}

 

在views文件中添加以下代码

def label_ifequal(request):
    tem = Template(
        """
        {% ifequal gender "M" %}
            <p>欢迎登陆 {{name}} 先生 </p>
        {% else %}
            <p>欢迎登陆 {{name}} 女士 </p>
        {% endifequal %}
        """
    )
    data = Context({
        "name": "lee",
        "gender": "M",
    })
    result = tem.render(data)
    return HttpResponse(result)

同时在urls文件中更新

path('ifequal/',label_ifequal),

打开浏览器,输入地址,就可以看到效果了

django的模板语言

如果ifequal匹配的结果为假,则是另一个效果

django的模板语言

{% for %}

1、{% for %} 标签需要 {% endfor %} 标签进行闭合

2、{% for %} 标签采用了和python一样的for in结构。

3、{% for %} 循环出来的不是html对象只是数据

 

views

def label_for(request):
    tem = Template(
        """
        <table>
        {% for i in nums %}
            <tr>
            {% for j in nums %}
                {% if j <= i %}
                <td style="padding-right: 20px;">
                    {{ j }} * {{ i }} = {%  widthratio i 1 j %}
                </td>
                {% endif %}
            {% endfor %}
            </tr>
        {% endfor %}        
        </table>
        """
    )
    data = Context({
        "nums": range(1,10),
    })
    result = tem.render(data)
    return HttpResponse(result)

urls

path('for/',label_for),

显示效果如下django的模板语言

 

{{ forloop }}

1、forloop是django模板语言定义好的一个变量,用来表示循环当中的每次循环

2、Forloop为嵌套循环提供了parentloop参数来记录当前循环的上一层循环的情况

3、通常我们使用forloop标签进行循环的开头或者末尾判断

 

views

def label_forloop(request):
    tem = Template(
        """
        <ul>
        {% for i in num %}
            <p>===============</p>
            <h3>大循环!</h3>
            {{ forloop }}
            <p>===============</p>
            {% for title in nums %}
                {{ forloop }}
                <li>
                    {{ title }} 是第{{ forloop.counter }}次循环,他的父循环是第{{ forloop.parentloop.counter }}次循环
                </li>
            {% endfor %}
            {% if not forloop.last %}
                <p>-------------------------------------</p>
            {% endif %}
        {% endfor %}
        
        """
    )
    data = Context({
        "nums": "abcde",
        "num": "123"
    })
    result = tem.render(data)
    return HttpResponse(result)

urls

path('forloop/',label_forloop),

 

效果如下

django的模板语言

3、过滤器

对变量进行具体功能的处理

{{ | }}

views

def filter(request):
    templat = Template(
        """
            {{ argv | upper }}
        """
    )
    context = Context({
        "argv": "dadfqtoifvsdflkgh"
    })
    result = templat.render(context)
    return HttpResponse(result)
path('filter/',filter),

显示效果如下

django的模板语言