2012-08-14 44 views

回答

16

您需要指定模板文件夾的絕對路徑。始終使用正斜槓,即使在Windows上也是如此。

例如,如果你的項目文件夾是 「/家/ djangouser /項目/ MyProject的」(Linux)或 'C:\項目\ MyProject的\'(Windows)中,你的TEMPLATE_DIRS是這樣的:

# for Linux 
    TEMPLATE_DIRS = (
     '/home/djangouser/projects/myproject/templates/', 
    ) 

    # or for Windows; use forward slashes! 
    TEMPLATE_DIRS = (
     'C:/projects/myproject/templates/', 
    ) 

或者,您可以使用指定的PROJECT_ROOT變量,並通過將其與模板文件夾的相對路徑進行連接來生成絕對路徑。這具有如下優點:如果將項目複製到其他位置,則只需更改PROJECT_ROOT。您需要導入os模塊,使其工作:

# add at the beginning of settings.py 
import os 

# ... 

TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, 'templates/'), 
) 
+0

感謝您的回答。它的說法PROJECT_ROOT沒有爲第二個答案定義。 – weaveoftheride 2012-08-14 17:25:43

+0

我的項目文件夾位於/ Users/andrewwelch/Sites/env /,我想我必須改變這個,如果我把它放到遠程服務器上 – weaveoftheride 2012-08-14 17:27:15

+0

是的,是我的錯。我注意到PROJECT_ROOT不是一個標準變量,並且被我添加到settings.py中,我擡頭看。它基本上像這裏的建議一樣:http://stackoverflow.com/questions/4919600/django-project-root-self-discovorey – eminor 2012-08-14 18:20:14

2

的PROJECT_DIR尚未確定...的PROJECT_DIR不是一個變量。其目錄/文件夾「模板」所在的路徑。這應該有幫助

import os 
PROJECT_DIR = os.path.dirname(os.path.dirname(__file__)) 
TEMPLATE_DIRS = os.path.join(PROJECT_DIR, 'templates') 
1

如果您使用的是Django 1.9,建議使用BASE_DIR而不是PROJECT_DIR。

# add at the beginning of settings.py 
import os 

# ... 

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/'), 
) 
9

如果你使用Django較新版本的工作,你可能需要將其添加到DIR列表裏面settings.py下模板。

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': ['[project name]/templates'], # Replace with your project name 
     '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', 
      ], 
     }, 
    }, 
] 
-1

在web/settings.py中添加它解決了我的一切。希望它也能幫助你。

import os 
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
from os.path import join 
TEMPLATE_DIRS = (
    join(BASE_DIR, 'templates'), 
) 
+1

這與已發佈的答案有什麼不同?你所做的只是將'join'綁定爲全局的,而不是使用完整的'os.path.join()'拼寫。 – 2017-02-25 13:44:18

+0

當我使用已發佈的答案。我可以得到一個錯誤,說沒有找到BASE_DIR – ninyesiga 2017-02-27 07:43:15

+0

'BASE_DIR'只是一個名字(儘管它看起來像Django 1.9中的項目模板,並且現在定義了名稱,請參閱https://github.com/django/django/blob /master/django/conf/project_template/project_name/settings.py-tpl)。 [使用virtualenv時,django settings.py中TEMPLATE \ _DIRS的路徑是什麼](// stackoverflow.com/a/24706023)使用名稱'PROJECT_DIR'來確保相同的值。 – 2017-02-27 07:46:24

相關問題