2014-01-14 16 views
0

我有这样的目录结构,如果它的问题(这是默认推荐的结构,每个的Satchmo文档):如何修复我的模板加载器以检查根目录?

site 
- apps 
    | - __init__.py 
- config 
- projects 
    | - site 
     | - home 
      | - templates 
        | - about.html 
        | - home.html 
      | - models.py, views.py, admin.py 
     | - __init__.py 
     | - local_settings.py 
     | - settings.py 
     | - urls.py 
     | - wsgi.py 
    | - __init__.py 
- static 
    | - css 
    | - images (maybe this got autogenerated?) 
    | - js 
    | - media 
- templates 
    | base.html 
- manage.py 

我的网址还为about.html和home.html的和这两个条目扩展基地html的。然而,当我访问这些网址时,我得到了我的一些文本的通用satchmo页面,这些文本是我从大约和在家收录的,但它并没有扩展base.html。在安装satchmo之前,我可以确认这个工作正常,但现在我不确定哪里出了问题。我假设它扩展了一些其他的base.html,因为如果我将扩展改为master.html,它会抛出TemplateDoesNotExist异常(我也不确定如何解决)。我在我的settings.py如下:

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader', 
    'django.template.loaders.app_directories.Loader', 
) 

TEMPLATE_DIRS = (
    'templates', 
) 

如果我移动模板目录项目中的站点文件夹,它似乎工作,但我不想在那儿。我试着向TEMPLATE_DIRS添加'../../templates',但这也不起作用,即使它做到了,我也不确定这是如何与我在app文件夹的某些级别声明的模板进行交互的。 。什么是解决这个问题的正确方法?

回答

2

TEMPLATE_DIRS条目应该是绝对路径。你可以这样做:

import os 
from os.path import normpath, abspath, dirname, join 
BASE_DIR = normpath(abspath(join(dirname(__file__), '..', '..'))) 
TEMPLATE_DIRS = (
    join(BASE_DIR, 'templates'), 
) 

如果你的master.html位于你的templates目录中,那么这个错误也应该被修复。

的是“基础”的BASE_DIRdirname(__file__),它返回目录包含当前文件,settings.py。然后,结果是join编辑'..'两次,也就是我们去两个目录,所以现在我们在顶部'网站'目录。我们称之为abspath以确保它是绝对路径,并且normpath可以删除双斜线等。

+0

您能否解释BASE_DIR赋值实际上做了什么?我对Python很陌生,但我不确定。我也已经从'BASE_DIR = os.path.dirname(os.path.dirname(__ file __))'''位置拷贝了这个任务。这是如何影响事物的? – Lunyx

+0

我只是通过调试器,BASE_DIR的结果是相同的。它也不能解决问题。编辑:我假设你的任务应该从我已经拥有的一个目录开始,但似乎并不奏效。 – Lunyx

+0

BASE_DIR的单向性应该起作用,我在生产中得到了这个确切的代码。但再看一遍,你需要去看两个dir('site/projects/site/settings.py'和'site/templates /',所以'projects/site'需要从设置的dirname中'删除' .py以'BASE_DIR'获得'site'的绝对路径) – sk1p

相关问题