【问题标题】:How can I fix my template loader to check for the root directory?如何修复我的模板加载器以检查根目录?
【发布时间】:2014-02-02 01:12:04
【问题描述】:

如果重要的话,我有一个这样的目录结构(根据 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

我的 URL 包含 about.html 和 home.html 的条目,并且这两个条目都扩展了 base.html。但是,当我访问这些 URL 时,我得到了通用的 satchmo 页面,其中包含我从 about 和 home 中包含的一些文本,但它根本没有扩展 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',
)

如果我将模板目录移动到项目中的站点文件夹,它似乎可以工作,但我不希望它在那里。我尝试将“../../templates”添加到 TEMPLATE_DIRS,但这也不起作用,即使这样做了,我也不确定这将如何与我在应用程序文件夹的某些级别下声明的模板交互.解决此问题的正确方法是什么?

【问题讨论】:

    标签: python django django-templates satchmo


    【解决方案1】:

    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 在你的模板目录中,这个错误也应该被修复。

    BASE_DIR 的“基础”是dirname(__file__),它返回包含当前文件settings.py目录。然后,结果是joined 和'..' 两次,也就是说,我们向上两个目录,所以现在我们在顶部的“站点”目录中。我们调用abspath 来确保它是绝对路径,调用normpath 来删除双斜线等。

    【讨论】:

    • 你能解释一下 BASE_DIR 赋值的实际作用吗?我是 Python 新手,我不太确定。我也已经完成了从BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 某处复制的作业。这对事物有何影响?
    • 我只是通过调试器和 BASE_DIR 的结果是相同的。它也不能解决问题。编辑:我假设你的作业应该比我已有的目录上一个目录,但它似乎不起作用。
    • BASE_DIR 的单一目录应该可以工作,我在生产中得到了这个确切的代码。但是再看一遍,你需要向上两个目录(site/projects/site/settings.pysite/templates/,所以projects/site 需要从settings.py 的目录名中“删除”以获得site 的绝对路径为@ 987654336@)
    • 好的,所以我没有注意到它在 local_settings.py 中被覆盖。它现在确实有效。顺便说一句,只有全局这样的设置更好,因为它在推送到生产后不应该改变?我从其他地方复制了这些设置,所以我一开始不想破坏任何东西。
    • 您如何使用local_settings.py?你是在settings.py 中做from local_settings import * 还是相反?您是否将这两个文件都置于源代码管理之下?
    猜你喜欢
    • 2015-11-08
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2021-09-09
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多