欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

在Python的Django框架中加載模版的方法

 更新時(shí)間:2015年07月16日 12:02:41   投稿:goldensun  
這篇文章主要介紹了在Python的Django框架中加載模版的方法,是Django使用中的基本操作,需要的朋友可以參考下

為了減少模板加載調(diào)用過程及模板本身的冗余代碼,Django 提供了一種使用方便且功能強(qiáng)大的 API ,用于從磁盤中加載模板,

要使用此模板加載API,首先你必須將模板的保存位置告訴框架。 設(shè)置的保存文件就是settings.py。

如果你是一步步跟隨我們學(xué)習(xí)過來的,馬上打開你的settings.py配置文件,找到TEMPLATE_DIRS這項(xiàng)設(shè)置吧。 它的默認(rèn)設(shè)置是一個(gè)空元組(tuple),加上一些自動(dòng)生成的注釋。

TEMPLATE_DIRS = (
 # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
 # Always use forward slashes, even on Windows.
 # Don't forget to use absolute paths, not relative paths.
)

該設(shè)置告訴 Django 的模板加載機(jī)制在哪里查找模板。 選擇一個(gè)目錄用于存放模板并將其添加到 TEMPLATE_DIRS 中:

TEMPLATE_DIRS = (
 '/home/django/mysite/templates',
)

下面是一些注意事項(xiàng):

    你可以任意指定想要的目錄,只要運(yùn)行 Web 服務(wù)器的用戶可以讀取該目錄的子目錄和模板文件。 如果實(shí)在想不出合適的位置來放置模板,我們建議在 Django 項(xiàng)目中創(chuàng)建一個(gè) templates 目錄。

    如果你的 TEMPLATE_DIRS只包含一個(gè)目錄,別忘了在該目錄后加上個(gè)逗號(hào)。 

Bad:


# Missing comma!
TEMPLATE_DIRS = (
 '/home/django/mysite/templates'
)

 
Good:

# Comma correctly in place.
TEMPLATE_DIRS = (
 '/home/django/mysite/templates',
)

    Python 要求單元素元組中必須使用逗號(hào),以此消除與圓括號(hào)表達(dá)式之間的歧義。 這是新手常犯的錯(cuò)誤。

    如果使用的是 Windows 平臺(tái),請(qǐng)包含驅(qū)動(dòng)器符號(hào)并使用Unix風(fēng)格的斜杠(/)而不是反斜杠(),就像下面這樣:

TEMPLATE_DIRS = (
 'C:/www/django/templates',
)

    最省事的方式是使用絕對(duì)路徑(即從文件系統(tǒng)根目錄開始的目錄路徑)。 如果想要更靈活一點(diǎn)并減少一些負(fù)面干擾,可利用 Django 配置文件就是 Python 代碼這一點(diǎn)來動(dòng)態(tài)構(gòu)建 TEMPLATE_DIRS 的內(nèi)容,如: 例如:

import os.path

TEMPLATE_DIRS = (
 os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)

    這個(gè)例子使用了神奇的 Python 內(nèi)部變量 __file__ ,該變量被自動(dòng)設(shè)置為代碼所在的 Python 模塊文件名。 `` os.path.dirname(__file__)`` 將會(huì)獲取自身所在的文件,即settings.py 所在的目錄,然后由os.path.join 這個(gè)方法將這目錄與 templates 進(jìn)行連接。如果在windows下,它會(huì)智能地選擇正確的后向斜杠”“進(jìn)行連接,而不是前向斜杠”/”。

    在這里我們面對(duì)的是動(dòng)態(tài)語言python代碼,我需要提醒你的是,不要在你的設(shè)置文件里寫入錯(cuò)誤的代碼,這很重要。 如果你在這里引入了語法錯(cuò)誤,或運(yùn)行錯(cuò)誤,你的Django-powered站點(diǎn)將很可能就要被崩潰掉。

完成 TEMPLATE_DIRS 設(shè)置后,下一步就是修改視圖代碼,讓它使用 Django 模板加載功能而不是對(duì)模板路徑硬編碼。 返回 current_datetime 視圖,進(jìn)行如下修改:

from django.template.loader import get_template
from django.template import Context
from django.http import HttpResponse
import datetime

def current_datetime(request):
 now = datetime.datetime.now()
 t = get_template('current_datetime.html')
 html = t.render(Context({'current_date': now}))
 return HttpResponse(html)

此范例中,我們使用了函數(shù) django.template.loader.get_template() ,而不是手動(dòng)從文件系統(tǒng)加載模板。 該 get_template() 函數(shù)以模板名稱為參數(shù),在文件系統(tǒng)中找出模塊的位置,打開文件并返回一個(gè)編譯好的 Template 對(duì)象。

在這個(gè)例子里,我們選擇的模板文件是current_datetime.html,但這個(gè)與.html后綴沒有直接的聯(lián)系。 你可以選擇任意后綴的任意文件,只要是符合邏輯的都行。甚至選擇沒有后綴的文件也不會(huì)有問題。

要確定某個(gè)模板文件在你的系統(tǒng)里的位置, get_template()方法會(huì)自動(dòng)為你連接已經(jīng)設(shè)置的 TEMPLATE_DIRS目錄和你傳入該法的模板名稱參數(shù)。比如,你的 TEMPLATE_DIRS目錄設(shè)置為 '/home/django/mysite/templates',上面的 get_template()調(diào)用就會(huì)為你找到 /home/django/mysite/templates/current_datetime.html 這樣一個(gè)位置。

如果 get_template() 找不到給定名稱的模板,將會(huì)引發(fā)一個(gè) TemplateDoesNotExist 異常。 要了解究竟會(huì)發(fā)生什么,讓我們按照第三章內(nèi)容,在 Django 項(xiàng)目目錄中運(yùn)行 python manage.py runserver 命令,再次啟動(dòng)Django開發(fā)服務(wù)器。 接著,告訴你的瀏覽器,使其定位到指定頁面以激活current_datetime視圖(如 http://127.0.0.1:8000/time/ )。假設(shè)你的 DEBUG項(xiàng)設(shè)置為 True,而你有沒有建立current_datetime.html 這個(gè)模板文件,你會(huì)看到Django的錯(cuò)誤提示網(wǎng)頁,告訴你發(fā)生了 TemplateDoesNotExist 錯(cuò)誤。

Screenshot of a TemplateDoesNotExist error.

該頁面與我們?cè)诘谌陆忉屵^的錯(cuò)誤頁面相似,只不過多了一塊調(diào)試信息區(qū): 模板加載器事后檢查區(qū)。 該區(qū)域顯示 Django 要加載哪個(gè)模板、每次嘗試出錯(cuò)的原因(如:文件不存在等)。 當(dāng)你嘗試調(diào)試模板加載錯(cuò)誤時(shí),這些信息會(huì)非常有幫助。

接下來,在模板目錄中創(chuàng)建包括以下模板代碼 current_datetime.html 文件:

<html><body>It is now {{ current_date }}.</body></html>

在網(wǎng)頁瀏覽器中刷新該頁,你將會(huì)看到完整解析后的頁面。

相關(guān)文章

  • 從零開始的TensorFlow+VScode開發(fā)環(huán)境搭建的步驟(圖文)

    從零開始的TensorFlow+VScode開發(fā)環(huán)境搭建的步驟(圖文)

    這篇文章主要介紹了從零開始的TensorFlow+VScode開發(fā)環(huán)境搭建的步驟(圖文),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • python for循環(huán)內(nèi)輸出和外輸出方式

    python for循環(huán)內(nèi)輸出和外輸出方式

    這篇文章主要介紹了python for循環(huán)內(nèi)輸出和外輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 詳解Python中的普通函數(shù)和高階函數(shù)

    詳解Python中的普通函數(shù)和高階函數(shù)

    這篇文章主要為大家介紹了Python中的普通函數(shù)和高階函數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • 詳解python中eval函數(shù)的作用

    詳解python中eval函數(shù)的作用

    在本篇文章里小編給大家整理的是關(guān)于python中eval函數(shù)作用以及實(shí)例代碼,需要的朋友們參考下吧。
    2019-10-10
  • 使用Matlab將矩陣保存到csv和txt文件

    使用Matlab將矩陣保存到csv和txt文件

    這篇文章主要介紹了使用Matlab將矩陣保存到csv和txt文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • 深入講解Python中的迭代器和生成器

    深入講解Python中的迭代器和生成器

    這篇文章主要介紹了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以參考下
    2015-10-10
  • Python?八個(gè)數(shù)據(jù)清洗實(shí)例代碼詳解

    Python?八個(gè)數(shù)據(jù)清洗實(shí)例代碼詳解

    不管你承不承認(rèn),數(shù)據(jù)清洗著實(shí)不是一件簡(jiǎn)單的任務(wù),大多數(shù)情況下這項(xiàng)工作是十分耗時(shí)而乏味的,但它又是十分重要的,本篇文章帶給你八個(gè)實(shí)例代碼
    2022-01-01
  • Python為人臉照片添加口罩實(shí)戰(zhàn)

    Python為人臉照片添加口罩實(shí)戰(zhàn)

    本文主要介紹了Python為人臉照片添加口罩實(shí)戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程

    Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程

    這篇文章主要介紹了Python requests HTTP驗(yàn)證登錄實(shí)現(xiàn)流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Python里的dict和set的背后小秘密

    Python里的dict和set的背后小秘密

    這篇文章主要介紹了在Python里的dict和set的背后小秘密,dict字典是Python中的重要基礎(chǔ)知識(shí),set與其類似,需要的朋友可以參考下
    2021-11-11

最新評(píng)論