1. 程式人生 > >Django 渲染模板、路徑配置、變量使用。

Django 渲染模板、路徑配置、變量使用。

object 設置 return 函數 djang ret 發送 htm 獲取

DTL與普通的HTML文件的區別:

DTL模板是一種帶有特殊語法的HTML文件,這個HTML文件可以被Django編譯,可以傳遞參數進
去,實現數據動態化。在編譯完成後,生成一個普通的HTML文件,然後發送給客戶端。

渲染模板

  • 先在templates文件夾下創建html文件。

  • render_to_string:找到模板,然後將模板編譯後渲染成Python的字符串格式。最後在通過HttpResponse類包裝成一個HttpResponse對象返回回去。

      在views.py文件中編寫
    
      from django.template.loader import render_to_string
    
      from django.http import HttpResponse
    
      def index(request):
    
          html = render_to_string("detail.html")
    
          return HttpResponse(html)
    
      最後在urls.py文件中,將路徑寫入即可
  • 以上方式雖然已經很方便了。但是django還提供了一個更加簡便的方式,直接將模板渲染成字符串和包裝成 HttpResponse 對象一步到位完成。

      在views.py文件中編寫
    
      from django.shortcuts import render
    
      der index(request):
    
          return render(request,'detail.html')

模板查找路徑配置

模板查找路徑配置:在項目的 settings.py文件中。有一個TEMPLATES 配置,這個配置包含了模板引擎的配置,模板查找路徑的配置,模板上下文的配置等。模板路徑可以在這個地方配置。

  • DIRS:這是一個列表,在這個列表中可以存放所有的模板路徑,以後在視圖中使用 render或者render_ to _ string渲染模板的時候,會在這個列表的路徑中查找模板。

      'DIRS':[os.path.join(BASE_DIR, 'templates')]
  • APP_DIRS:默認為True,這個設置為 True 後,會在"INSTALLED _ APPS"的安裝了的 APP下的 templates文件加中查找模板。

      'APP_DIRS': True,
  • DIRS優先級高於APP_DIRS

模板變量的使用

模板中可以包含變量, Django在渲染模板的時候,可以傳遞變量對應的值過去進行替換。變量的命名規範和Python非常類似,只能是阿拉伯數字和英文字符以及下劃線的組合,不能出現標點符號等特殊字符。變量需要通過視圖函數渲染,視圖函數在使用render或者render_to_string的時候可以傳遞一個context 的參數,這個參數是一個字典類型。以後在模板中的變量就從這個字典中讀取值的。

  • views.py代碼示例

      def profile(request):
          return render(request,'profile.html',context={'username':'張三 '})
  • profile.html模板代碼示例

      <p>{{username}}</p>

模板中的變量同樣也支持 點(.)的形式。在出現了點的情況,比如 person.username,模板是按照以下方式進行解析的:

  • views.py示例

      class Person(object):
          def__init__(self,username):
              self.username = username
    
      def profile(request):
          p = Person('jiajia') #創建一個對象
          context = {
              'person':p
          }
          return render(request,'profile.html,context=context)
  • html代碼示例

      <html>
      ...
      <body>
          {{person.username}} #根據Key來獲取
      </body>
      </html>

傳遞的一個參數是一個模型或者是一個類。獲取屬性的話。可以通過點的方式

如果person是一個字典呢?

  • views.py示例

      class Person(object):
          def__init__(self,username):
              self.username = username
    
      def profile(request):
          context = {
              'person':{
                  'username':'jiajia'   #person對應的是一個字典 
              }
          }
          return render(request,'profile.html,context=context)
  • html代碼示例

          {{person.username}}

註意

如果views.py文件是這樣的。

        context = {
            'person':{
                'username':'jiajia'   #person對應的是一個字典 
                'keys':'abc'
            }
        }

html文件是這樣的呢?

        {{person.keys}} 

返回的是abc,即對應的值。這樣是會產生歧義的。為了避免產生歧義,應該避免在這個字典內寫他本身的一些屬性來作為這個鍵的值!

另外的形式

  • views.py示例

          context = {
              'person':[ 
                  'a',   #這裏是一個中括號
                  'b',
                  'c'
              ]
          }

如何獲取列表屬性的第一個值a呢?

  • html代碼示例

          {{person.0}}   #通過點(.)索引獲取

同理,元組也是這樣。

Django 渲染模板、路徑配置、變量使用。