Django模板无法向head标签添加内容问题排查
问题:Django模板中robots元标签未在页面head中显示
我有如下几个模板文件:
bootstrap.html
{% extends 'django_bootstrap5/bootstrap5.html' %} {% block bootstrap5_title %}{% block title %}{% endblock %}{% endblock %}
sm/base.html
{% extends 'sm/bootstrap.html' %} {% load django_bootstrap5 %} {% block head %} <meta name="robots" content="all, index, follow" /> {% endblock %} {% block bootstrap5_content %} <div class="container"> <h1>{% block title %}(no title){% endblock %}</h1> {% autoescape off %}{% bootstrap_messages %}{% endautoescape %} {% block content %}(no content){% endblock %} </div> {% endblock %}
sm/home.html
{% extends 'sm/base.html' %} {% load django_bootstrap5 %} {% block title %}My title{% endblock %} {% block head %} <meta name="robots" content="all, index, follow" /> {% endblock %} {% block content %} <br/> {% endblock %}
查看页面输出时,head标签中并未出现robots元标签,页面输出片段如下:
<!DOCTYPE html> <!DOCTYPE html> <html lang="en-ie"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title>My title</title> <link crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css" integrity="sha384-rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG65" rel="stylesheet"> </head> <body> ...
问题原因
你在子模板中定义的head块,在父模板django_bootstrap5/bootstrap5.html里根本不存在。Django模板系统只会渲染父模板中已定义的块,子模板里新增的、父模板没有的块会被直接忽略。
解决办法
django-bootstrap5的基础模板bootstrap5.html中,专门用于扩展head内容的块是bootstrap5_extra_head,你需要把代码中的{% block head %}替换为这个官方指定的块。
修改后的代码示例:
sm/base.html 调整后
{% extends 'sm/bootstrap.html' %} {% load django_bootstrap5 %} {% block bootstrap5_extra_head %} <meta name="robots" content="all, index, follow" /> {% endblock %} {% block bootstrap5_content %} <div class="container"> <h1>{% block title %}(no title){% endblock %}</h1> {% autoescape off %}{% bootstrap_messages %}{% endautoescape %} {% block content %}(no content){% endblock %} </div> {% endblock %}
sm/home.html 调整后
{% extends 'sm/base.html' %} {% load django_bootstrap5 %} {% block title %}My title{% endblock %} {% block bootstrap5_extra_head %} <meta name="robots" content="all, index, follow" /> {% endblock %} {% block content %} <br/> {% endblock %}
修改完成后,robots元标签就会正确渲染到页面的head区域中。
内容的提问来源于stack exchange,提问作者Baz
相关产品推荐
相关产品推荐

