Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
django.template.loaders.app_directories.Loader找不到模板文件_Django_Django Templates - Fatal编程技术网

django.template.loaders.app_directories.Loader找不到模板文件

django.template.loaders.app_directories.Loader找不到模板文件,django,django-templates,Django,Django Templates,模板文件保存在app目录下,但在呈现时会引发TemplateDoesNotExist异常: 模板加载程序的后期处理如下所示: Django尝试按以下顺序加载这些模板: Using loader django.template.loaders.app_directories.Loader: ... $PROJECT/apps/myapp/templates/search.html (File does not exist) ... 我想知道为什么它会寻找: $PROJEC

模板文件保存在app目录下,但在呈现时会引发TemplateDoesNotExist异常:

模板加载程序的后期处理如下所示:

Django尝试按以下顺序加载这些模板:

Using loader django.template.loaders.app_directories.Loader:
    ...
    $PROJECT/apps/myapp/templates/search.html (File does not exist)
    ...
我想知道为什么它会寻找:

$PROJECT/apps/myapp/templates/search.html
而不是:

$PROJECT/apps/myapp/templates/myapp/search.html

后者确实存在

将它们添加到您的设置文件中

    import os
    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__))

    TEMPLATE_DIRS = (
        os.path.join(PROJECT_ROOT, "/apps/myapp/templates/"),
    )

$PROJECT/apps/myapp/templates/search.html
。这就是它将要寻找的路径


django.template.loaders.app\u目录。Loader
将依次在所有
已安装的\u应用程序中查找
templates
目录。

django.template.loaders.filesystem.Loader\u template\u source:此加载器根据模板目录从文件系统加载模板默认情况下,它处于启用状态。


django.template.loaders.app_目录。load_template_源:此加载器从文件系统上的django应用程序加载模板。对于已安装的应用程序中的每个应用程序,加载程序将查找templates子目录。如果目录存在,Django将在那里查找模板

这意味着您可以将模板存储在各个应用程序中,从而可以轻松地使用默认模板分发Django应用程序。例如,如果已安装的_应用程序包含('myproject.polls'、'myproject.music'),则get_模板('foo.html')将按以下顺序查找模板:

Using loader django.template.loaders.app_directories.Loader:
    ...
    $PROJECT/apps/myapp/templates/search.html (File does not exist)
    ...
请注意,加载程序在首次导入时执行优化:它缓存已安装的应用程序包具有templates子目录的列表


默认情况下,此加载程序处于启用状态。

假设您创建了一个默认项目和应用程序

  • django管理员启动项目xyz
  • django管理员startapp abc
  • xyz和abc文件夹都位于主项目文件夹中
  • 要使第一个模板正常工作,需要进行以下最小的更改

  • 在settings.py中,将已安装的应用程序更改为添加“abc”(我忘记了,失败了)
  • 在URL.py中添加
    • 添加行:导入abc.views
    • 更改URL模式以添加路径('abc/',abc.views.index)
  • 在views.py的索引定义中,使用loader.get_模板('abc/index.html')
  • 创建abc/templates/abc/index.html文件(我写了“模板”,花了几个小时才意识到这就是“模板”)
  • 确保模板和内部文件夹具有“其他”用户的执行权限和html文件的读取权限。(我以root用户身份工作,但由于此错误而失败)
  • 重新启动项目(runserver或apache2服务)
  • 我的错误摘要

  • 编辑已安装的应用程序
  • 默认为“模板”
  • 设置x和r权限

  • 您好,您也可以添加您用于请求模板的代码吗?你有类似于
    t=loader.get_template('myapp/search.html')
    的东西吗?当你使用django模板加载器时,你不需要指定
    template\u DIRS
    。我忘了它应该是类似于get_template(“myapp/search.html”)的东西,而不是get_template(“search.html”)。我只记得最好创建路径为“myapp/templates/myapp/search.html”的模板文件,但这并不意味着在查找模板时不需要路径中的“myapp”。这是我的错。谢谢各位。我也遇到了同样的问题,所以我们应该始终使用[appname]/[template].html结构吗?