Django模板继承未生效。

15

这是我的base.html

<!DOCTYPE html> 
<head> 
<title> My Site </title>
</head> 
<body>
<div id="wrapper">  
<!-- HEADER START -->
{% block nav %} {% endblock %}
{% block index %} {% endblock %}
</div> 
</body>
</html>

这是我的nav.html文件

{% extends "base.html" %}
{% block nav %}
<div id="header"> 
<div class="inner">

<div class="nav"> 
<ul> 
<li class="current"><a href="index.html">Home</a></li> 
<li><a href="about.html">About</a></li> 
<li><a href="blog_right.html">Blog</a></li>                        
<li><a href="contact.html">Contact</a></li> 
</ul>                     
</div>  
<div class="clear"></div>           
</div><!-- .inner end --> 
</div><!-- #header end --> 
<!-- HEADER END -->
{% endblock %}

这是我的index.html文件

{% extends "base.html" %}
{% block index %}
<p> hello </p>
{% endblock %}

我以前已经做过好几次了,但是我不知道为什么这个现在不起作用?这里有urls和views。


2
问题是什么? “它不起作用” 并不是很有帮助。 - Ismail Badawi
5个回答

19

一切都很好,你遇到的问题是混淆了概念,仅在base中命名一个块不会调用它。 区分extends和include的差异。你把extends和include混淆了。

如果在视图中调用比如index.html,它将被正确渲染。 要实现你想要的效果,可以将视图中的base.html更改为index.html。

希望这有所帮助。更多信息可在此处阅读:https://docs.djangoproject.com/en/dev/topics/templates/#template-inheritance


谢谢,它真的帮了我很多。是啊,我会记住的...我太傻了 :( - user993563
4
2019年的回答仍然适用!补充你非常清晰的解释:如果您在页面上使用 {% block something %} {% endblock something %},则不应在 views.py 中引用此页面。相反,您必须引用包含要在该块中显示的代码的页面。 - Michel K

3

对于更多像我一样进入这里的人,需要注意的主要事项是,当您使用{% extends 'something.html' %}时,您不能在顶层使用除这些模板标签之外的任何内容。

显然,您可以在这些标签内部使用html标签(如块标签),但不要在模板标签外放置任何内容。


0

如果你在 extends 中更改路径,例如 {% extends 'mysite/index.html' %},也会有所帮助。视图函数必须使用 extends 渲染文件,而不是基本文件。


0
views.py 中,你需要调用那个扩展另一个模板的模板,而不是反过来。以你的示例为例,你应该调用 nav.html。

0

尝试做这个

{% extends 'appname/index.html' %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接