Jinja2 include & extends 没有按预期工作
Jinja2 include & extends not working as expected
我在 base.html
文件中使用了 include
和 extends
,并希望它们按顺序包含在内。但是 extends
模板附加到文件末尾。
我希望我的模板给我输出:
<!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.html
、footer.html
, content.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>
我认为您想在
中使用 include
而不是 extends
{% extends "content.html" %}
我建议结构略有不同。我最近使用了这样的结构并得到了正确的结果。
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>
希望对您有所帮助。
我在 base.html
文件中使用了 include
和 extends
,并希望它们按顺序包含在内。但是 extends
模板附加到文件末尾。
我希望我的模板给我输出:
<!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.html
、footer.html
, content.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>
我认为您想在
中使用include
而不是 extends
{% extends "content.html" %}
我建议结构略有不同。我最近使用了这样的结构并得到了正确的结果。
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>
希望对您有所帮助。