django如何使用模板为网站的主页

时间:2013-10-21 04:44:40

标签: python django

这是我的文件夹结构(全部变黑只是项目的名称,只是假设'myproject'):

enter image description here

我想将我的主页(即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

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

3 个答案:

答案 0 :(得分:0)

Django会尝试在index.html设置中指定的各种文件夹中找到TEMPLATE_DIRS模板,如果templates设置为{{1,则会在每个应用的TEMPLATE_LOADERS文件夹中找到'django.template.loaders.app_directories.Loader'模板}}

Loading Templates

的详细信息

答案 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')),
)