这是我的文件夹结构(全部变黑只是项目的名称,只是假设'myproject'):
我想将我的主页(即http://mydomain.com/
)设置为模板HTML。因此,在this SO post之后,我将其设置为url.py
项目文件夹中的myproject
:
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^$', TemplateView.as_view(template_name="index.html")),
url(r'^events/', include('events.urls', namespace='events')),
url(r'^admin/', include(admin.site.urls)),
)
但Django一直试图将此路径附加到events文件夹。浏览器的DEBUG = True
输出表明它无法在
/home/ubuntu/django/myproject/events/templates/templates/myproject/index.html
这当然不是我想要指出的。我该如何解决这个问题?
答案 0 :(得分:0)
Django会尝试在index.html
设置中指定的各种文件夹中找到TEMPLATE_DIRS
模板,如果templates
设置为{{1,则会在每个应用的TEMPLATE_LOADERS
文件夹中找到'django.template.loaders.app_directories.Loader'
模板}}
答案 1 :(得分:0)
您需要定义TEMPLATE_DIRS并尝试使用这样的绝对路径:
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
...
TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'templates'),
)
...
如果您有一些应用程序而模板的文件夹位于另一个文件夹中,那么您可以这种方式定义TEMPLATE_DIRS:
PROJECT_PATH = os.path.realpath(os.path.dirname(__file__))
...
TEMPLATE_DIRS = (
os.path.join(PROJECT_PATH, 'events', 'templates'),
os.path.join(PROJECT_PATH, 'templates'),
)
...
不要忘记更改视图以呈现模板,如下所示:
...
return render_to_response('events/index.html',{},context_instance=RequestContext(request))
...
编辑:
将项目的网址更改为:
from events import urls
...
urlpatterns = patterns('',
...
url(r'^events/', include('events.urls', namespace='events')),
...
)
答案 2 :(得分:0)
最简单的解决方案是使单个模板目录与您的应用程序处于同一级别 例如:
/home/ubuntu/django/myproject/templates/events
/home/ubuntu/django/myproject/templates/some_other_app
另外,检查设置文件中的TEMPLATE_DIRS,这是工作示例:
from os.path import abspath, basename, dirname, join, normpath
DJANGO_ROOT = dirname(dirname(abspath(__file__)))
SITE_ROOT = dirname(DJANGO_ROOT)
TEMPLATE_DIRS = (
normpath(join(SITE_ROOT, 'templates')),
)