美文网首页Python相关点Jinja
django框架-7模板-循环、判断、常用标签、过滤器等

django框架-7模板-循环、判断、常用标签、过滤器等

作者: 幽谷听泉 | 来源:发表于2016-10-01 20:25 被阅读485次

    本节内容:

    1. 列表,字典,类的实例的使⽤
    2. 循环:迭代显示列表,字典等中的内容
    3. 条件判断:判断是否显示该内容,⽐如判断是⼿机访问,还是电脑访问,给出不⼀样的代码。
    4. 标签:for,if 这样的功能都是标签。
    5. 过滤器:管道符号后⾯的功能,⽐如{{ var|length }},求变量⻓度的 length 就是⼀个过滤器。
    实例一、显示一个基本的字符串到页面

    代码如下:

     #views.py
     def test(request):
        string = 'Hello World !'
        return render(request,'learn/test.html',{'string':string})
    
    <!-- test.html -->
    {{ string }}
    

    页面:

    Paste_Image.png
    实例2 for循环和list内容的展示

    代码如下:

     #views.py
     def test(request):
        List = ['caideyang','CCC','AAA','BBB']
        return render(request,'learn/test.html',{'List':List})
    
    <!-- test.html -->
    {% for i in List %}
    {{ i }}<br>
    {% endfor %}
    

    简单总结⼀下:⼀般的变量之类的⽤ {{ }}(变量);功能类的,⽐如循环,条件判断是⽤ {% %}(标签)

    实例三,显示字典中内容:
    #views.py
    def test(request):
        Dict = {'name':'caideyang','age':29}
        return render(request,'learn/test.html',{'Dict':Dict})
    
    <!-- test.html -->
    姓名:{{Dict.name}}<br>
    年龄:{{Dict.age}}
    
    Paste_Image.png

    test.html还可以如下:
    {% for key,value in Dict.items %}
    {{ key }}:{{ value }}

    {% endfor %}

    实例四,在模板进⾏ 条件判断和 for 循环的详细操作:
    #views.py
    def test(request):
        List = map(str,range(100))
        return render(request,'learn/test.html',{'List':List})
    

    假如我们想⽤逗号将这些元素连接起来:

    <!-- test.html -->
    {% for i in List %}
    {{ i }},
    {% endfor %}
    

    效果如下:


    Paste_Image.png

    会发现最后一个元素后面也有逗号,用forloop.last 这个布尔型变量,如果是最后一项,其为真,否则为假

    test.html可改成:
     {% for i in List %}
        {{ i }}{% if not forloop.last %},{% endif %}
     {% endfor %}
    

    展示结果如下


    Paste_Image.png
    在for循环中还有很多有用的东西
    变量 描述
    forloop.counter 索引从 1 开始算
    forloop.counter0 索引从 0 开始算
    forloop.revcounter 索引从最⼤⻓度到 1
    forloop.revcounter0 索引从最⼤⻓度到 0
    forloop.first 当遍历的元素为第⼀项时为真
    forloop.last 当遍历的元素为最后⼀项时为真
    forloop.parentloop 在嵌套的 for 循环中,获取上层 for 循环的 forloop
    • 当列表中可能为空值时for empty
    {% for i in List %}
        {{ i }}{% if not forloop.last %},{% endif%}
        {% empty %}<li>抱歉为空</li>
    {% endfor %}
    
    实例五,模板上得到视图对应的⽹址:{% url "view-name" arg1 arg2 %}
    #views.py
    def add2(request,a,b):
        c = int(a) + int(b)
        return HttpResponse('%s + %s = %s' %(a,b,c))
    
    #urls.py
    url(r'^add/(\d+)/(\d+)$',views.add2 ,name='add4'),
    
    <!-- test.html -->
    {% url 'add4' 4 5 %}
    
    • 这样url地址上就会显示出:/add/4/5/ 这个url地址
    • 假如我们以后修改urls.py 中的r'add/(\d+)/(\d+)/$'这一部分,改成另的,例如:r'jiafa/(\d+)/(\d+)/$',我们不需要再次修改模板,当再次访问的时候,地址会自动变成 /jiafa/4/5/

    还可以使⽤ as 语句将内容取别名(相当于定义⼀个变量),多次使
    ⽤(但视图名称到⽹址转换只进⾏了⼀次)
    {% url 'some-url-name' arg arg2 as the_url %}
    <a href="{{ the_url }}">链接到:{{ the_url }}</a>

    实例六,模板中的逻辑操作:==, !=, >=, <=, >, < 这些⽐较都可以在模板中使⽤
    {% if score >= 90 %}Good
    {% elif score > 60 %}Common
    {% else %}Bad
    {% endif %} 
    
    • and, or, not, in, not in 也可以在模板中使⽤
    • 判断‘caideyang’ 是否在List列表里:
    {% if 'ziqiangxuetang' in List %}
      ‘caideyang’ 在List列表里
    {% else %}
      ‘caideyang’ 不在List列表里
    {% endif %}
    

    相关文章

      网友评论

        本文标题:django框架-7模板-循环、判断、常用标签、过滤器等

        本文链接:https://www.haomeiwen.com/subject/hwwryttx.html