Django-模版

  • 基本使用
  • 母版
  • 导入include
  • 函数 - > 不用加() 自动执行
  • 模版自定义函数:
    • simple_filter
      • 最多两个参数 {{ name2|my_upper2:’ hello!’ }}
    • simple_tag
      • 参数个数限制 {% my_upper3 name2 ‘ddd’ ‘hello!’ ‘autumn’ %}
    • simple_filter 可以做条件判断,simple_tag不行

  • 母版
# menu.html 母版
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div>
        <h3>这是一个组件</h3>
        <div class="title">标题:</div>
        {% block xx %}{%  endblock %}
    </div>
</body>
</html>

# test.py

{%  extends 'menu.html' %}

{% block xx %}
    <p>hello!!</p>
{% endblock %}


# 一般写3个block:css一个,内容一个,js一个

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    {% block css %}{% endblock %}
</head>
<body>

    <div>
        <h3>这是一个组件</h3>
        <div class="title">标题:</div>
        {% block xx %}{%  endblock %}

    </div>
    {% block js %}{% endblock %}
</body>
</html>

  • include
# views.py
def test(request):
    return render(request,'test.html',{
        'name2':'autumn'
    })

# pub.html
<div>
    <h3>这是一个组件</h3>
    <div class="title">标题:</div>
    <div class="content">内容:{{ name2 }}</div>
</div>

# test.html
<body>
    {% include 'pub.html' %}
    <p>-------</p>
    {% include 'pub.html' %}
</body>




  • 模版自定义函数:
# views.py
def test(request):
    return render(request,'test.html',{
        'userinfo':{'name':'summer','age':23,'sex':'man'},
        'name2':'autumn'
    })

# /app01/templatetags/xx.py

from django import template
register = template.Library()

@register.filter
def my_upper(value):
    return value.upper()

# simple_filter 只能最多传2个参数
@register.filter
def my_upper2(value,arg):
    return value + arg


# simple_tag 没有参数限制
@register.simple_tag
def my_upper3(value,arg1,arg2,arg3):
    return value + arg1 + arg2 + arg3



# simple_filter 可以做条件判断,simple_tag不行
@register.filter
def my_bool(value):
    return False


# test.html

{% load xx %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <ul>
        {% for i in userinfo %}
            <li>{{ i }}</li>
        {% endfor %}
    </ul>

    <ul>
        {% for key in userinfo.keys %}
            <li>{{ key }}</li>
        {% endfor %}
    </ul>

    <ul>
        {% for value in userinfo.values %}
            <li>{{ value }}</li>
        {% endfor %}
    </ul>

    <ul>
        {% for k,v in userinfo.items %}
            <li>{{ k }}--{{ v }}</li>
        {% endfor %}
    </ul>


    <p>{{ name2|upper }}</p>
    <p>{{ name2|my_upper }}</p>

    // simple_filter
    <p>{{ name2|my_upper2:' hello!' }}</p>

    // simple_tag
    <p>{% my_upper3 name2 'ddd' 'hello!' 'autumn'  %}</p>

    // simple_filter
    {% if name2|my_bool %}
        <h3></h3>
    {% else %}
        <h3></h3>
    {% endif %}

</body>
</html>

  • 自定义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',
      )
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章