我的本地机器运行Python 2.5和Ubuntu 8.10上的Nginx, Django是根据最新的开发主干构建的。

对于我请求的每个URL,它抛出:

TemplateDoesNotExist at /appname/path appname/template_name.html Django尝试加载这些模板,顺序如下: 使用loader django.template.loaders. filessystem .function: 使用loader django.template.loaders.app_directories.function: TEMPLATE_DIRS (“/ usr / lib / python2.5 /网站/ projectname /模板”,)

在这种情况下,它是否在寻找/usr/lib/python2.5/site-packages/projectname/templates/appname/template_name.html ?奇怪的是这个文件确实存在于磁盘上。为什么Django找不到它?

我在Ubuntu 9.04上使用Python 2.6在远程服务器上运行相同的应用程序,没有出现这样的问题。其他设置相同。

在我的本地机器上是否有任何配置错误的地方,或者是什么可能导致了这样的错误,我应该调查一下?

在我的settings.py中,我指定了:

SETTINGS_PATH = os.path.normpath(os.path.dirname(__file__))
# Find templates in the same folder as settings.py.
TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

它应该寻找以下文件:

/usr/lib/python2.5/site-packages projectname /模板/ appname1 / template1.html /usr/lib/python2.5/site-packages projectname /模板/ appname1 / template2.html /usr/lib/python2.5/site-packages projectname /模板/ appname2 / template3.html ...

以上所有文件都存在于磁盘上。

解决了

在我尝试之后,它现在工作了:

chown -R www-data:www-data /usr/lib/python2.5/site-packages/projectname/*

这是奇怪的。我不需要在远程服务器上执行此操作即可使其工作。


当前回答

我加上了这个

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

它仍然显示错误,然后我意识到在另一个项目中,模板显示没有在settings.py文件中添加该代码,所以我检查了该项目,我意识到我没有在这个项目中创建虚拟环境,所以我做了

virtualenv env 

它成功了,不知道为什么

其他回答

检查模板和appname目录的权限,使用ls -l或尝试从django执行绝对路径open()。

我加上了这个

TEMPLATE_DIRS = (
    os.path.join(SETTINGS_PATH, 'templates'),
)

它仍然显示错误,然后我意识到在另一个项目中,模板显示没有在settings.py文件中添加该代码,所以我检查了该项目,我意识到我没有在这个项目中创建虚拟环境,所以我做了

virtualenv env 

它成功了,不知道为什么

1.创建一个文件夹“模板”在你的“应用程序”(让你这样命名你的应用程序) 你可以把HTML文件放在这里。 但强烈建议在“templates”文件夹中创建一个同名的文件夹(“app”),然后将html放在那里。进入'app/templates/app'文件夹

2.现在在'app'的urls.py中放入:

  path('', views.index, name='index'), # in case of  use default server index.html 

3.在'app'的views.py中输入:

from django.shortcuts import render 

def index(request): return
    render(request,"app/index.html")
    # name 'index' as you want

对于django 1.9版本,我添加了

'DIRS': [os.path.join(BASE_DIR, 'templates')], 

一行到settings.py中的Templates块 而且效果很好

在我的情况下,只要将我的应用程序包含在settings.py文件中的INSTALLED_APPS中就足够了:

INSTALLED_APPS = [
    "myapp",
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
]

另外,记住模板应该像这样放在你的目录中: myapp /模板/ myapp / template_name.html 但是当你指向这个模板时,你可以这样做: Template = loader.get_template("myapp/template_name.html")