2

这是我的文件夹结构(所有涂黑的只是项目名称,假设为“myproject”):

在此处输入图像描述

我想将我的主页设置http://mydomain.com/为模板 HTML。因此,在此 SO 帖子之后,我将其设置为我url.pymyproject项目文件夹中:

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 一直试图将此路径附加到事件文件夹。浏览器的DEBUG = True输出表明它在以下位置找不到此模板

/home/ubuntu/django/myproject/events/templates/templates/myproject/index.html

这当然不是我想要指出的。我该如何解决?

4

3 回答 3

0

如果设置有, Django 将尝试在您在设置中index.html指定的各种文件夹和每个应用程序的文件夹中查找模板TEMPLATE_DIRStemplatesTEMPLATE_LOADERS'django.template.loaders.app_directories.Loader'

加载模板中的更多详细信息

于 2013-10-21T05:10:54.980 回答
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')),
    ...
)
于 2013-10-21T05:11:23.207 回答
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')),
)
    
于 2013-10-21T09:06:13.013 回答