Django模板語言的學習

1.模板系統
  1.語法
    1.變量相關
    {{ name}} ,{{ name|length}}, {{ name |default:"默認值"}}
  2.邏輯相關
    1.if判斷
    {% if a > b %} //{% if a in b%}
    {% endif %}css

    {% if a > b %}
    {% else %}
    {% endif %}html

    {% if a > b %}
    {% elif %}
    {% else %}
    {% endif %}
    2.for循環
    {% for i in name-list %}
    {{ i }}
    {% empty %}
    <p>若是爲空的話這裏能夠填寫一些提示內容</p>
    {% endfor %}python

    forloop.counter
    forloop.counter0
    forloop.revcounter
    forloop.revcounter0django

    forloop.first
    forloop.lastbootstrap

    forloop.parentloop -->兩層循環
2.filter
  1.經常使用的filter
  1. length
  2. filesizeformat -->格式化文件大小的
  3. date:'Y-m-d H:i:s' -->格式化時間
  4. silce 切片
  5. safe -->XSS攻擊 經過評論的方式寫一段JS代碼
  6. truncatechars:20 -->截取字符長度 一邊用來摘要
  7. default -->默認
2. 自定義的filter
  步驟
  定義階段
    1. 在app下新建一個python的包:templatetags包
    2. 在上面的python包中新建一個python文件 名字隨意
    3. 在上述的python文件中
    form django import template
    #生成一個註冊用的示例
    register = template.Libray() #注意是大寫的
    #定義一個自定義的filter
    @register.filter(name='new_filter')
    def add_str(arg): (最多有兩個參數) #第一個參數是通道符前面的 ,能夠有第二個參數
    return ...
  調用階段
    1. 在Django模板文件中,導入剛纔新建的python文件
    {% load py文件名 %}
    2. 按照filter的語法調用
    {{ name|new_filter}} #沒有第二個參數傳入
    {{ name|new_filter:arg2 }} #傳入第二個參數
    3.母版與組件
1.何時用母版
  html頁面有重複的代碼的,把他們提取出來放到一個單獨的html文件
2.子頁面如何使用母版
  {% extends 'base.html' %} -->必須放在第一行
  {% block 塊名 %} {% endblock %} -->子頁面使用block去替換母版中同名的塊
3.組件
  1.何時使用組件
  重複代碼 包裝成一個小的html文件
  2.如何使用
  {% include '組件.html' %}
3.Django模塊語言中關於靜態文件的靈活寫法
  1.利用static方法幫我憑藉靜態文件的路徑
  STATICFILES_DIRS = [
  os.path.join(BASE_DIR, "static"),
  ]
  {% load static %}
  <link href="{% static 'bootstarp/css/bootstrap.min.css' %}" rel="stylesheet">
4.自定義的simple_tag
  比filter傳入的參數多
5.有自定義的inclusion_tag
  用來返回一段html代碼
  1.在定義階段
  在app中下面新建templatetags文件夾
  新建一個xx.py文件
  from django import template
  #生成註冊示例 ,名字必須是register
  register = template.Library()
  @register.inlcusion_tag('ul.html')
  def show_ul(num):
  num = 1 if num < 1 else int(num)
  data = {"第{:0>3}號技師".format(i) for i in range(1,num+1)}
  return {'data':data}
2.調用階段
  {% load xx文件名 %}
  {% show_ul 10 %}
  4.視圖
    1.CBV和FBV
      CBV基於類的視圖
      FBV基於方法的視圖
    2.request對象
      1.相關方法
        1.request.method -->獲取請求的方法(GET或者POST等)
        2.request.GET -->一般用來獲取URL裏面的參數
        3.request.POST -->一般用來獲取POST提交過來的數據
        4.request.path_info -->獲取用戶請求的路徑
        5.request.body -->獲取用戶POST的內容字節形式
5.文件上傳
    注意form表單裏面須要有 enctype="multipart/form-data"
    在保存上傳文件錢,數據須要存放到某個位置,默認擔當上傳文件小於2.5M的時候,django會將上傳文件的所有內容直接上傳
    當上傳文件很大的時候,django會把上傳文件寫到臨時文件中,而後存放到系統的臨時文件裏
    在後臺處理的時候調用
    <input type='file' name='filename'>app

    request.FILES['filename'] -->獲取文件對象
    request.FILES['filename'].name -->獲取文件對象名
    request.FILES['filename'].chunks() -->從文件對象中一點一點的讀取 須要寫個循環讀取
4.路由系統
    1.分組匹配 -->給視圖函數傳一個位置參數
    path('delete_p_list/[0-9]{2}/$',views.delete_p_list),
    <a href="/delete_p_list/{{ publisher.id }}">刪除</a></button>
    2.分組命名匹配 -->給視圖函數傳一個關鍵字參數
      3.反向解析URL
    本質上就是給url匹配模式起別名 而後再用別名拿到具體的URL路徑
    re_path('publisher_list/[0-9]{2}/$',views.Publisher.as_view(),name='pulisher_list'),
    <a href="{% url 'pulisher_list' %}" class="active">
1.如何使用
    在模板語言中
    {% url '別名' %}
    在視圖中
    from django import reverse
    reverse('別名') -->獲得一個具體的URL路徑函數

相關文章
相關標籤/搜索