Django基礎,Day10 - template 模板引擎與路徑設置

做爲一個Web框架,Django須要一個方便的方式來生成動態的HTML。最多見的方法依賴於模板。模板包含所需的HTML輸出的靜態部分以及一些特殊的語法描述如何插入動態內容。html

Django框架後端默認支持自生內置的一套模板系統DTL(Django Template Language) 和 有名的Jinja2模板系統。固然,也能夠從第三方模塊中以前其餘模板系統。若是沒有特殊要求,建議使用Django自帶的DTL模板系統,這也是django 1.8以前惟一能夠的內置選項。python

TEMPLATE 默認配置

settings.py:django

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

BACKEND:模板引擎類的python路徑,內置的模板引擎分別有'django.template.backends.django.DjangoTemplates'和'django.template.backends.jinja2.Jinja2'後端

DIRS:模板引擎搜索模板的路徑,如上,默認搜索project目錄下的templates目錄
微信

APP_DIRS:告訴模板引擎是否搜索app目錄下的templates目錄。默認爲true,便是默認搜索app目錄下的templates目錄app

實例說明

根據前面章節的實例,可見咱們使用了默認的TEMPLATE設置,html頁面直接存放在app目錄下的template目錄下,如 polls/templates/polls/index.html.框架

在view.index 中直接使用測試

 

return render(request, 'polls/index.html', context)

 

 便可渲染到polls/index.html 頁面。spa

若是設置爲 'APP_DIRS': False,則會搜索模板失敗,如:debug

根據錯誤信息,可見模板引擎搜索模板的路徑在project下的templates中。若是將index.html 移動到mysite\templates\polls\index.html 中便可訪問。

若以上 'APP_DIRS': True,且同時存在

mysite\templates\polls\index.html

mysite\polls\templates\polls\index.html

則會訪問 mysite\templates\polls\index.html 而不是 mysite\polls\templates\polls\index.html

多模板引擎設置

Django項目能夠配置一個或多個模板引擎(甚至是零,若是你不使用模板)。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [
            '/home/html/example.com',
            '/home/html/default',
        ],
    },
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        'DIRS': [
            '/home/html/jinja2',
        ],
    },
]

If you call get_template('story_detail.html'), here are the files Django will look for, in order:

  • /home/html/example.com/story_detail.html ('django' engine)
  • /home/html/default/story_detail.html ('django' engine)
  • /home/html/jinja2/story_detail.html ('jinja2' engine)

If you call select_template(['story_253_detail.html', 'story_detail.html']), here’s what Django will look for:

  • /home/html/example.com/story_253_detail.html ('django' engine)
  • /home/html/default/story_253_detail.html ('django' engine)
  • /home/html/jinja2/story_253_detail.html ('jinja2' engine)
  • /home/html/example.com/story_detail.html ('django' engine)
  • /home/html/default/story_detail.html ('django' engine)
  • /home/html/jinja2/story_detail.html ('jinja2' engine)

When Django finds a template that exists, it stops looking.

 

 


***微信掃一掃,關注「python測試開發圈」,瞭解更多測試教程!***
相關文章
相關標籤/搜索