Django 1.6 下模板怎麼用?

下載了 Django 1.6 b1 卻看了 Django 1.5 的教程,看到模板部分發現不一樣的地方:

教程:第四章:模版

按教程添加了文件夾和文件 /home/django/mysite/templates/current_datetime.html

但是還是顯示 TemplateDoesNotExist 錯誤找不到 current_datetime.html

TEMPLATE_DIRS = (
/home/django/mysite/templates,
)
#這段代碼是硬打在settings.py里


這個問題讓我糾結了一上午,後來發現1.6隻要在setting.py添加一句

TEMPLATE_DIRS=( os.path.join(BASE_DIR,templates),)

BASE_DIR已經在setting.py中定義過

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))

然後views.py如此

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)

注意:1.6新建項目有兩個相同名字的文件夾,在父級文件夾里新建templates文件夾存放模板(與manage.py同級)


TEMPLATE_DIRS = (

./templates,

)

很簡單,這樣就搞掂!


Django1.6中默認就會找各個app的templates下的模板文件,所以你不需要做另外的設置。

只需要你去掉關於TEMPLATES_DIR的設置就可以了。你這是畫蛇添足啦。

另外要自己設置的話,你這個路徑打錯了,你這麼硬寫死,應該就找不到其他app下templates中的文件了。


根據官方文檔 django.template.loaders.filesystem.Loader(The Django template language: For Python programmers)

看到如下說明

For example, for this setting:
INSTALLED_APPS = (myproject.polls, myproject.music)
"then get_template(foo.html) will look for foo.html in these directories,
in this order:
/path/to/myproject/polls/templates/
/path/to/myproject/music/templates/
and will use the one it finds first."

所以官方所說的默認為templates針對的是app下的,不是針對project下的


1.6沒有用過,以下是我以前的筆記(我也是1.4和1.5的文檔混著來學,1.6不一定適用,僅供參考)

------------------------------------------------------------------------------------------------------------------------------

如果使用的是 Windows 平台,請包含驅動器符號並使用Unix風格的斜杠(/)而不是反斜杠()

最好的方式是使用絕對路徑(即從文件系統根目錄開始的目錄路徑)。 如果想要更靈活一點並減少一些負面干擾,可利用 Django 配置文件就是 Python 代碼這一點來動態構建 TEMPLATE_DIRS 的內容,例如:

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

然後對views.py進行修改,加上

from django.template.loader import get_template

然後變成

# views.py
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)

我們使用了函數 django.template.loader.get_template() ,而不是手動從文件系統載入模板。 該 get_template() 函數以模板名稱為參數,在文件系統中找出模塊的位置,打開文件並返回一個編譯好的 Template 對象。


感覺大家都在說怎麼配置,但django的配置路徑隨著版本的變化會經常改變,最好的辦法是把base_dir列印出來,然後自己去看配置的路徑是否正確。

(tango_with_django_virtualenv)sh-3.2# python manage.py shell

Python 2.7.5 (default, Mar 9 2014, 22:15:05)

[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

(InteractiveConsole)

&>&>&>

&>&>&> from tango_with_django_project.settings import BASE_DIR

&>&>&> print BASE_DIR

/Users/lsf/tango_with_django_virtualenv/tango_with_django_project


建議還是直接查看Django1.6的文檔。

在對比完1.4, 1.5, 1.6之後,就覺得變化還是有點多的。這個框架還是在進步的。雖然是一個高大全的框架,重。

在我剛開始學習Django的時候,還是感覺其在配置那塊做得比較模糊,比如Static,對於剛開始的學習者,是有點摸不著門道的,相對來說Django1,6的配置做得好很多了。


我剛開始看就出問題了 manage.py shell 進入後

通過 database API 來瀏覽數據

研究好久都不行 一個命令都過不去


推薦閱讀:

Django框架應用中models.py文件與資料庫操作問題?
Django中提示TemplateDoesNotExist?
Django 多線程問題是怎麼回事?
用Django學習設計網站後台有什麼好書可以入門和深入學習?
為什麼感覺django很難呢?

TAG:Python | Django框架 |