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(\,/),
)
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 shellPython 2.7.5 (default, Mar 9 2014, 22:15:05)[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwinType "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很難呢?