2016-09-18 51 views
2

我在base.html文件中使用includeextends,并期望它们按顺序包含在内。但extends模板被追加到文件的末尾。Jinja2包含&延伸不按预期工作

我希望我的模板给我的输出:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
<p>Test String from block !</p> 
<footer>text from footer.</footer> 
</body> 
</html> 

但目前的结果是:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 
<body> 
<footer>text from footer.</footer> 
</body> 
</html> 
     <p>Test String from block !</p> 

base.html,第一我有header.html,然后content.html然后footer.html但渲染顺序是header.htmlfooter.htmlcontent.html

index.html

{% extends "base.html" %} 
{% block content %} 
    <p>Test String from block !</p> 
{% endblock %} 

base.html

{% include "header.html" %} 
<body> 
    {% extends "content.html" %} 
{% include "footer.html" %} 

header.html

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>Title</title> 
</head> 

content.html

{% block content %} 

{% endblock %} 

footer.html

<footer>text from footer.</footer> 
</body> 
</html> 

回答

2

我建议结构略有不同。我最近刚使用过这样的结构,并得到了正确的结果。

的index.html:

{% extends "base.html" %} 

{% block head %} 
    <!-- if you want to change the <head> somehow, you can do that here --> 
{% endblock head %} 

{% block content %} 
<body> 
    <p>Test String from block !</p> 
    {% include 'content.html' %} 
</body> 
{% include 'footer.html' %} 
{% endblock content %} 

base.html文件:

<!DOCTYPE html> 
    <html lang="en"> 
    <head> 
     {% block head %} 
     <meta charset="UTF-8"> 
     <title>Title</title> 
     {% endblock head %} 
    </head> 
    {% block content %} 
    {% endblock content %} 
</html> 

content.html:

<!-- whatever you want in here --> 

footer.html:

<footer>text from footer.</footer> 

希望有帮助。

+0

为什么之前发生的事情是烧瓶/忍者的错误还是我的坏? –

+0

我认为这是文件以某种方式互相牵引的顺序问题,但我无法确切地说。 – coralvanda

+0

您的回答很有用,我也会在'jinja' github版本库中提出问题。感谢您的帮助 –

0

我认为你要使用include代替extends

{% extends "content.html" %} 
+0

因为即时通讯使用{%block%}而无法正常工作 –