TemplateDoesNotExist。加载静态文件和模板Django项目结构

时间:2014-12-08 04:38:22

标签: python django

我对如何从其他应用程序生成模板感到有点困惑

以下是我的项目结构图:

enter image description here

我收到此错误:

TemplateDoesNotExist at /
home.html

家/ views.py:

class HomeView(generic.TemplateView):
    template_name = "home.html"

Settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
    os.path.join(BASE_DIR, "home/static/home/js"),
    os.path.join(BASE_DIR, "home/static/home/images"),
    os.path.join(BASE_DIR, "home/static/home/css"),
)


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

项目的/ home / urls.py:

from django.conf.urls import patterns, url

from home.views import HomeView

urlpatterns = patterns('',
    url(r'^$', HomeView.as_view(), name="home"),
)

项目/ urls.py

from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include("home.urls", namespace="home")),

)

项目/模板/家庭/ index.html的

<!DOCTYPE html>
<html>
<head lang="en">
  ...
  <!-- Fonts -->
  <link href='http://fonts.googleapis.com/css?family=Lobster' rel='stylesheet' type='text/css'>
  <!-- Custom CSS -->
  <link href="{{ STATIC_URL }}boothie.css" rel="stylesheet">
  <!-- Custom JS-->
  <script src="{{ STATIC_URL }}boothie.js"></script>

  <title>Boothie</title>
</head>
<body>
<div class="container">
   ...
</div>
</head>
  {% block content %}{% endblock %}
</body>
</html>

项目的/ home /模板/家/ home.html的:

{% extends index.html %}

{% block content %}
    ...
    <script src="{{ STATIC_URL }}js/jquery.easing.1.3.js"></script>
    <script src="{{ STATIC_URL }}js/boothie.js"></script>
{% endblock %}

2 个答案:

答案 0 :(得分:2)

Django停在它找到的第一个匹配所请求文件名的模板上,它将从app文件夹中的templates目录开始。

如果它在此处找不到它,它将向上链,直到它搜索TEMPLATE_DIRS设置中的所有位置,然后才会打印出无法找到模板的错误。搜索模板的方式由TEMPLATE_LOADERS setting定义。

在项目布局中,所需的模板位于主应用程序的模板目录中,并位于此目录内的home目录下。因此,视图中的模板路径应为home/home.html

class HomeView(generic.TemplateView):
    template_name = "home/home.html"

答案 1 :(得分:1)

如果您的模板目录位于项目的根目录中,则必须将其添加到setitngs.py

如果它是app的子目录(即settings.py中的INSTALLED_APPS),则app模板加载器(默认启用)将加载它。

如果您的应用程序被称为主页,那么您将在主目录中拥有模板目录,而不是主页下的模板,这样可以将其作为home / home.html访问,因为它位于模板目录的home子文件夹下在settings.py