<title> {%block title%}主页{%endblock%} </title>是否被其他页面覆盖?

时间:2018-09-06 19:46:24

标签: django django-templates

这是我的基本文件

{% 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 %}

所以请帮助我解决这个问题。

2 个答案:

答案 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" %}

,然后在“子模板”中覆盖它。