Python大神 - Django(深层学习)-- 模板语言

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python大神 - Django(深层学习)-- 模板语言相关的知识,希望对你有一定的参考价值。

寄语:

模板语言:模版的创建过程,对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

模板(template)中也有自己的语言,该语言可以实现数据展示

一、继承(include,extend)

a.完全一致   

  {% include xxx.html %}

b.继承模板,设计自己特立的部分({% block block_name %}{% endblock %})

  母版:{% block title %}{% endblock %}

  子版:{% extend xxx.html%}
        {% block block_name %}{% endblock %}

二、数据获取

  获取单个:{{ item }}

  循环:{% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
     forloop.counter  # 计算器,从1开始,forloop.counter

     forloop.first # 第一次循环      forloop.last   # 最后一次循环

三、判断

        {% if ordered_warranty %}  {% else %} {% endif %}
        {% if not ordered_warranty %} {% else %} {% endif %}
        
        {% if sort == courses or sort == org or sort == teacher % } {% else %} {% endif %}
        {% if sort == courses and sort == org % } {% else %} {% endif %}
        注:or与and不可放进同一逻辑里
        
        {% if sort == courses % } {% else %} {% endif %}
        {% ifequal sort courses %}active{% endifequal %} 

四、模板语言里提供的方法

 1   2)stringformat(数据类型的转换) 4       # 数据类型的转换
 5       {% ifequal city.id|stringformat:i city_id %}active2{% endifequal %} 
 6             
 7     3)分割(路径分割)--slice
 8         {% if request.path|slice:7  == /course %}{% endif %}
 9         
10     4)显示有choice字段的命名(get_degree_display)
11         {{ request.user.get_degree_display }}
12         
13     5)divisibleby标签的意义是用后面的参数去除,除尽为True,否则为False。
14         {% if forloop.counter|divisibleby:2 %}
15         
16     6)代码表示:5/1 *100,返回500,widthratio需要三个参数,它会使用 参数1/参数2*参数3,所以要进行乘法的话,就将参数2=1即可 Django模版除法
17         {%  widthratio 5 1 100 %}
18         
19     7)定制日期显示模式
20         {{ item.event_start|date:"Y-m-d H:i:s"}}
21         
22     823         {{ bio|truncatewords:"30" }}
24         
25     9)首字母大写
26         {{ my_list|first|upper }} 
27         
28     10)变小写
29         {{ name|lower }}

    11)放置CSRF攻击
      {% csrf_token %} # form表单使用
      xhr.setRequestHeader("X-CSRFToken", "{{ csrf_token }}"); # 用POST提交必须请求头带csrf_token # post 方法下使用

五、自定义simple_tag

技术分享
a、在app中创建templatetags模块

b、创建任意 .py 文件,如:xx.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
       
    @register.simple_tag
    def my_input(id,arg):
        result = "<input type=‘text‘ id=‘%s‘ class=‘%s‘ />" %(id,arg,)
        return mark_safe(result)
    
c、在使用自定义simple_tag的html文件中导入之前创建的 xx.py 文件名
    {% load xx %}

d、使用simple_tag
    {% my_simple_time 1 2 3%}
    {% my_input id_username hide%}

e、在settings中配置当前app,不然django无法找到自定义的simple_tag  
    INSTALLED_APPS = (
        django.contrib.admin,
        django.contrib.auth,
        django.contrib.contenttypes,
        django.contrib.sessions,
        django.contrib.messages,
        django.contrib.staticfiles,
        app01,
    )
自定义方法--步骤

 








以上是关于Python大神 - Django(深层学习)-- 模板语言的主要内容,如果未能解决你的问题,请参考以下文章

django manage.py执行命令报错,怎么回事,求大神解救

django helloworld案例总是报No module named mysite.view错误 求大神帮忙,第一个python项目都搞不定!

如何在Django Admin中表示这种两级深层关系?

用Python+Django1.9在Eclipse环境下开发web网站

Django和Flask这两个框架在设计上各方面有啥优缺点

django 博客开发