在我的 django View 中,我有:
def index(request):
return render_to_response('index.html',context_instance=RequestContext(request))
在我的基本模板(index.html)中,我有:
<div class="col-lg-5 col-sm-6">
<hr class="section-heading-spacer" />
<div class="clearfix"></div>
<h2 class="section-heading">Here Are The Details:</h2>
{% block 'body' %}
{% endblock %}
</div>
我的“ipsum.html”子模板有:
{% extends 'index.html' %}
{% block 'body' %}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
{% endblock %}
当我运行它时,:
{% block 'body' %}
{% endblock %}
消失了,但在 index.html 中没有任何东西可以替代它。我做错了什么?
最佳答案
根据上面显示的代码,您似乎没有使用 'ipsum.html'
呈现响应。您是否打算改为执行此操作(请注意 'ipsum.html'
)?
def index(request):
return render_to_response('ipsum.html', context_instance=RequestContext(request))
或者您可能需要另一种 View 吗?
def ipsum(request):
return render_to_response('ipsum.html', context_instance=RequestContext(request))
编辑
关于您的评论,您可以使用任意数量的子模板来扩展模板。例如,您可能有以下三个文件:
base.html
<html>
<body>
{% block 'body' %}
<p>testing 1</p>
{% endblock %}
</body>
</html>
child1.html
{% extends 'base.html' %}
{% block 'body' %}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum</p>
{% endblock %}
直接第二个 child 的延期
child2.html
{% extends 'base.html' %}
{% block 'body' %}
<p>Quo usque tandem abutere, Catilina, patientia nostra?</p>
{% endblock %}
由于我们没有向 child2.html 添加任何新 block ,因此首选方法是从 base.html
继承。
另一个可能的第二个 child 延期
但是,如果我们像这样向 child1.html
添加另一个 block (请注意 child1.html
现在有两个 block ):
child1.html
{% extends 'base.html' %}
{% block 'body' %}
<p>Lorem ipsum . . .</p>
{% endblock %}
{% block second_p %}
<p>Another paragraph . . .</p>
{% endblock %}
我们现在可能想扩展第二个子元素,因为我们已经在该模板中内置了第二个 block ,但该 block 未内置于 base.html
中:
child2.html
{% extends 'child1.html' %}
{% block 'body' %}
<p>Quo usque tandem abutere, Catilina, patientia nostra?</p>
{% endblock %}
{% block second_p %}
<p>And still another . . .</p>
{% endblock %}
现在您的 View 可以使用这些 html 文件中的任何一个来呈现您的模板。下面是分别渲染这三个模板的三个 View :
def index(request):
return render_to_response('base.html', context_instance=RequestContext(request))
def child1(request):
return render_to_response('child1.html', context_instance=RequestContext(request))
def child2(request):
return render_to_response('child2.html', context_instance=RequestContext(request))
关于python - 子模板未在 Django 中呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27350084/