English 中文(简体)
如何使项目模板和Satchmo模板共存?
原标题:
  • 时间:2009-03-11 21:57:20
  •  标签:

我正在使用位於現有專案中的Satchmo安裝進行工作。此專案擁有自己的模板,以及安裝的一些不同應用程式的模板。某些特定於應用程式的模板具有其自己的app_base.html變化,它們希望從base.html中推導出來。我希望能夠使用我的Satchmo模板執行相同的操作,讓它們位於我的專案基礎中,但也在它們周圍添加一些額外的HTML。

  • /templates
    • base.html
    • index.html
    • /news
      • news_base.html (extends base.html and adds news-specific template features)
      • index.html
      • detail.html
    • /store
      • base.html (overriding Satchmo s base)

这个结构有些用处,但不是我预期的那样。在/store/base.html(Satchmo的基础)中,我只是用一个测试消息替换了所有内容。我可以看到这个消息,所以我知道Satchmo正在加载它的基础而不是站点的基础。但是,由于使用了:我无法再扩展我的项目的基础了。

{% extends "base.html %}

由于它正在调用自身,因此会产生递归错误,而以下内容将无法运行。

{% extends "../base.html" %}

我意识到我可以将我的项目的base.html更改为稍微不同的名称,并将所有与应用程序相关的模板指向它们,但这似乎是对模板结构的一个相当重要的方面进行了重大的破解。

问题回答

嗯,我没想到django会以那种方式相对地查找模板。

有点疯狂的黑客,但这应该可以工作:

  • /templates/store/base.html extends "global_base.html"
  • /templates/global_base.html extends "base.html"

根据您的模板结构设置方式,调整设置TEMPLATE_LOADERS变量也是一个好建议。

TEMPLATE_LOADERS Default: ( django.template.loaders.filesystem.load_template_source , django.template.loaders.app_directories.load_template_source ) A tuple of callables (as strings) that know how to import templates from various sources. See The Django template language: For Python programmers.

For more information on how this affects the template loading process: http://docs.djangoproject.com/en/dev/ref/templates/api/#loader-types

从您描述问题的方式来看,似乎通过注释掉“app_directories.load_template_source”文件行,您可以更好地找到完成您正在做的事情的方法。

django.template.loaders.app_directories.load_template_source Loads templates from Django apps on the filesystem. For each app in INSTALLED_APPS, the loader looks for a templates subdirectory. If the directory exists, Django looks for templates in there.

This means you can store templates with your individual apps. This also makes it easy to distribute Django apps with default templates.

例如,对于这个设置:

INSTALLED_APPS = ( myproject.polls , myproject.music ) ...then get_template( foo.html ) will look for templates in these directories, in this order:

/path/to/myproject/polls/templates/foo.html /path/to/myproject/music/templates/foo.html Note that the loader performs an optimization when it is first imported: It caches a list of which INSTALLED_APPS packages have a templates subdirectory.

此加载器默认启用。

我遇到了同样的问题。看起来,Satchmo的开发人员通过在店铺模板目录中放置一个“空”基础来计划解决此问题。虽然这对你可能不再相关,但我希望在这里看到这个。

您可以在模板目录中创建一个“商店”目录,并将主要的satchmo base.html文件复制到该目录中。

这对我有用。





相关问题
热门标签