这是我的基本文件
{% load static %}
{% include "feed/header.html" %}
{% block content%}
{% endblock %}
{% include "feed/footer.html" %}
这是我的标题,其中包括标题:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %} Home {% endblock %}
</title>
因此,当我尝试覆盖详细信息页面中的标题时,它将始终显示标题的标题,即Home(不变),而不覆盖我覆盖的详细信息页面的标题。以下是我在“详细信息”页面中使用的代码:
{% extends 'feed/base.html'%}
{% block title %} Details {% endblock %}
{% block content %}
some views
{% endblock %}
所以请帮助我解决这个问题。
答案 0 :(得分:2)
docs for the include
tag明确表示这将不起作用:
先评估区块,然后再评估。这意味着包含另一个块的模板将包含已经已经评估并呈现的块,而不是可以被例如扩展模板覆盖的块。
答案 1 :(得分:1)
就像documentation所说的那样,您只能“覆盖”模板中定义的块,直接或间接地从它们扩展 (即,从扩展自身的模板扩展):>
应当将include标记视为“呈现此子模板并包含HTML”的实现,而不应视为“解析此子模板并像其父对象一样包含其内容”。这意味着所包含的模板之间没有共享状态-每个包含都是一个完全独立的呈现过程。
对块进行评估,然后再将其包括在内。这意味着包含另一个块的模板将包含已经评估和渲染的块,而不是可以被例如扩展模板覆盖的块。
因此,您需要将代码块内联到父模板中。例如:
{% load staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %} Home {% endblock %}
</title>
</head>
{% block content%}
{% endblock %}
{% include "feed/footer.html" %}
,然后在“子模板”中覆盖它。