Django框架摸板Templates

模板 Templates

  • 什麼是模板
    模板是可以根據字典數據動態變化的html網頁
    模板可以根據視圖中傳遞的字典數據動態生成相應的HTML網頁。

  • 模板的配置
    創建模板文件夾<項目名>/templates
    settings.py 中有一個 TEMPLATES 變量

    • BACKEND : 指定模板的引擎
    • DIRS : 模板的搜索目錄(可以是一個或多個)
    • APP_DIRS : 是否要在應用中的 templates 文件夾中搜索模板文件
    • OPTIONS : 有關模板的選項
  • 默認的模塊文件夾是項目根目錄下的templates

  • 修改settings.py文件,設置TEMPLATES的DIRS值爲'DIRS': [os.path.join(BASE_DIR, 'templates')],

    # file: settings.py
    TEMPLATES = [
      {
          'BACKEND': 'django.template.backends.django.DjangoTemplates',
          # 'DIRS': [],
          'DIRS': [os.path.join(BASE_DIR, 'templates')],  # 添加模板路徑
          'APP_DIRS': True,  # 是否索引各app裏的templates目錄
          ...
          },]
    
    
  • 模板的加載方式

    • 通過 loader 獲取模板,通過HttpResponse進行響應

      from django.template import loader
      # 1.通過loader加載模板
      t = loader.get_template("模板文件名")
      # 2.將t轉換成 HTML 字符串
      html = t.render(字典數據)
      # 3.用響應對象將轉換的字符串內容返回給瀏覽器
      return HttpResponse(html)
      
    • 使用 render() 直接加載並響應模板

      from django.shortcuts import render
      return render(request,'模板文件名', 字典數據)
      

Django 模板語言

模板的傳參

模板傳參是指把數據形成字典,傳參給模板,爲模板渲染提供數據

  • 使用 loader 加載模板

    t = loader.get_template('xxx.html')
    html = t.render(字典數據)
    return HttpResponse(html)
    
  • 使用render加載模板

    return render(request,'xxx.html',字典數據)
    

模板的變量

在模板中使用變量語法

  • {{ 變量名 }}

  • {{ 變量名.index }}

  • {{ 變量名.key}}

  • {{ 對象.方法 }}

  • {{ 函數名 }}

  • 視圖函數中必須將變量封裝到字典中才允許傳遞到模板上

    def xxx_view(request)
        dic = {
            "變量1":"值1",
            "變量2":"值2",
        }
        return render(request, 'xxx.html', dic)
    

    locals函數的使用
    locals() 返回當前函數作用域內全部局部變量形成的字典。

模板的標籤

  • 作用
    將一些服務器端的功能嵌入到模板中

  • 標籤語法

    {% 標籤 %}
    ...
    {% 結束標籤 %}
    
  • if 標籤

    {% if 條件表達式1 %}
    ...
    {% elif 條件表達式2 %}
    ...
    {% elif 條件表達式3 %}
    ...
    {% else %}
    ...
    {% endif %}
    
    • if 標籤裏的布爾運算符
      if 條件表達式裏可以用的運算符 ==, !=, <, >, <=, >=, in, not in, is, is not, notandor
      在if標記中使用實際括號是無效的語法。 如果您需要它們指示優先級,則應使用嵌套的if標記。
  • for 標籤

    • 語法

      {% for 變量 in 可迭代對象 %}
          ... 循環語句
      {% empty %}
          ... 可迭代對象無數據時填充的語句
      {% endfor %}
      
    • 內置變量 - forloop

      變量 描述
      forloop.counter 循環的當前迭代(從1開始索引)
      forloop.counter0 循環的當前迭代(從0開始索引)
      forloop.revcounter 循環結束的迭代次數(從1開始索引)
      forloop.revcounter0 循環結束的迭代次數(從0開始索引)
      forloop.first 如果這是第一次通過循環,則爲真
      forloop.last 如果這是最後一次循環,則爲真
      forloop.parentloop 當嵌套循環,parentloop 表示外層循環

過濾器

  • 作用
    在變量輸出時對變量的值進行處理
    您可以通過使用 過濾器來改變變量的輸出顯示。

  • 語法

    {{ 變量 | 過濾器1:參數值1 | 過濾器2:參數值2 ... }}
    
  • 常用的過濾器

    過濾器 說明
    lower 將字符串轉換爲全部小寫。
    upper 將字符串轉換爲大寫形式
    safe 默認不對變量內的字符串進行html轉義
    add: “n” 將value的值增加 n
    truncatechars:‘n’ 如果字符串字符多於指定的字符數量,那麼會被截斷。 截斷的字符串將以可翻譯的省略號序列(“…”)結尾。

    更多過濾器參見:https://docs.djangoproject.com/en/1.11/ref/templates/builtins/

模板的繼承

模板繼承可以使父模板的內容重用,子模板直接繼承父模板的全部內容並可以覆蓋父模板中相應的塊。

  • 定義父模板中的塊 block標籤,標識出哪些在子模塊中是允許被修改的。相當於定出一個頁面的框子,允許變化的地方使用block定義,可以動態修改
    block標籤:在父模板中定義,可以在子模板中覆蓋

    {% block block_name %}
    定義模板塊,此模板塊可以被子模板重新定義的同名塊覆蓋
    {% endblock block_name %}
    
  • 繼承模板 extends 標籤(寫在模板文件的第一行)
    子模板繼承語法標籤:{% extends '父模板名稱' %}
    如:{% extends 'base.html' %}

  • 子模板重寫父模板中的內容塊

    {% block block_name %}
    子模板塊用來覆蓋父模板中 block_name 塊的內容
    {% endblock block_name %}
    
  • 重寫的覆蓋規則

    • 不重寫,將按照父模板的效果顯示
    • 重寫,則按照重寫效果顯示
      注意:模板繼承時,服務器端的動態內容無法繼承

參考文檔:https://docs.djangoproject.com/en/1.11/ref/templates/

url 反向解析

url 反向解析是指在視圖或模板中,用爲url定義的名稱來查找或計算出相應的路由

  • url 函數的語法
    url(regex, views, kwargs=None, name="別名")
    例如:url(r'^user_login$', views.login_view, name="login")
  • url() 的name關鍵字參數
    • 作用:
      根據url 列表中的name=關鍵字傳參給 url確定了個唯一確定的名字,在模板中,可以通過這個名字反向推斷出此url信息
    • 在模板中通過別名實現地址的反向解析
      {% url '別名' %}
      {% url '別名' '參數值1' '參數值2' %}
      
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章