django扩展问题 - 子模板没有显示

时间:2010-10-31 01:18:23

标签: django django-templates

我已经在django中配置了必要的工作来扩展模板功能。这是我的代码:

settings.py 中的

def my_dir():
    import os.path
    return os.path.abspath(os.path.dirname(__file__))
TEMPLATE_DIRS = ( my_dir() + '/app/templates', ) #dynamic template directory
base.html中的

- 位于app / templates / site

....
<div id="SideBar" class="FloatLeft">
{% block sidebar %} {% endblock %}
</div>
....
sidebar.html中的

- 位于app / templates / site

{% extends "site/base.html" %}
{% block sidebar %}
   some code here
{% endblock %}

我还尝试了base.html中的{%include“site / sidebar.html”%}标记来检查模板目录,是的包含标记正在运行...

{%extends%}中的问题是什么?为什么它没有检测到它的父模板..

请帮助我们..非常感谢你的帮助......我还在等待答案.. tnx

7 个答案:

答案 0 :(得分:9)

您在视图中呈现哪个模板?它应该是孩子,而不是父母。

答案 1 :(得分:1)

我不确定你的问题是什么,但你应该检查以下几点:

  • {%extends%} tage应该是模板文件中的第一个(之后放一个空行以确定)
  • 我认为对基本模板的引用与您的TEMPLATE_DIR有关。尝试不同的方法,例如将两个模板放在同一级别等。
  • 检查两个模板中的所有标签,确保它们格式正确
  • 检查文件的编码。如果是UTF-8,请尝试在两个文件中禁用BOM。
  • 可能是您的目录设置有问题。尝试硬编码绝对路径以检查它。

这些是我能想象到的问题,但我无法保证它会起作用。

答案 2 :(得分:0)

有很多问题。简短的回答是“不,你不能在飞行中改变模板目录,即使你可以,你也绝对不会像现在这样做”

答案 3 :(得分:0)

您的主要问题是您忘记了TEMPLATE_DIRS设置中的逗号。试试这个:

TEMPLATE_DIRS = ( my_dir() + '/app/templates', )

请忽略cheshire的答案。

答案 4 :(得分:0)

使用os.path.join组合2个目录。

import os.path
TEMPLATE_DIRS = (
    os.path.join(os.path.dirname(__file__), 'templates'),
)

这里我假设templates是您保存模板的目录。现在,要访问模板,这是它们的基本目录。所以在其他文件中扩展base.html就是这样 -

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

答案 5 :(得分:0)

您确定要安装正确的模板加载器吗? 你应该在你的settings.py中找到它:

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

答案 6 :(得分:0)

丹尼尔罗斯曼给出的答案很明显,但如果指出你的孩子模板不实用(因为它可能不适用于更复杂的项目),有一种快速简便的方法。

在您的子模板中,删除{%extends&#34;&#34;你有的那些标签指向你的父母。

在您的父模板中,将{%block content%}替换为{%include&#34; path / to / child / template&#34; %}

那就是它!您的子模板现在将加载到块内容中,就像您直接渲染它一样。