我对如何从其他应用程序生成模板感到有点困惑
以下是我的项目结构图:
我收到此错误:
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 %}
答案 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
中