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