我已经在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中的....
<div id="SideBar" class="FloatLeft">
{% block sidebar %} {% endblock %}
</div>
....
sidebar.html中的{% extends "site/base.html" %}
{% block sidebar %}
some code here
{% endblock %}
我还尝试了base.html中的{%include“site / sidebar.html”%}标记来检查模板目录,是的包含标记正在运行...
{%extends%}中的问题是什么?为什么它没有检测到它的父模板..
请帮助我们..非常感谢你的帮助......我还在等待答案.. tnx
答案 0 :(得分:9)
您在视图中呈现哪个模板?它应该是孩子,而不是父母。
答案 1 :(得分:1)
我不确定你的问题是什么,但你应该检查以下几点:
这些是我能想象到的问题,但我无法保证它会起作用。
答案 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; %}
那就是它!您的子模板现在将加载到块内容中,就像您直接渲染它一样。