如何在Django模板中复用block内容到多个位置?
解决方法
根据你使用的模板引擎,可通过以下几种方式实现block内容的复用:
Django 模板引擎方案
在base.html中利用{{ self.block_name }}语法直接复用block内容,子模板无需额外修改:
{% block description %}Some description{% endblock %} <meta name="description" content="{{ self.description }}"> <meta property="og:description" content="{{ self.description }}">
当子模板重写descriptionblock时,两个meta标签的content会自动使用子模板定义的内容;若子模板未重写,则沿用父模板的默认值Some description。
Jinja2 模板引擎方案(如 Flask 框架)
Jinja2支持直接调用block内容,使用{{ block('block_name') }}语法:
{% block description %}Some description{% endblock %} <meta name="description" content="{{ block('description') }}"> <meta property="og:description" content="{{ block('description') }}">
子模板仅需重写一次descriptionblock,两个meta标签即可共享该内容。
通用模板变量方案
若你的模板引擎不支持上述语法,可通过定义模板变量实现复用:
父模板(base.html)
{% set page_description = page_description|default:"Some description" %} <meta name="description" content="{{ page_description }}"> <meta property="og:description" content="{{ page_description }}">
子模板
{% extends "base.html" %} {% set page_description = "当前页面的专属描述信息" %} {% block content %} <!-- 页面内容 --> {% endblock %}
子模板只需设置一次page_description变量,所有需要该内容的位置都会自动同步。
内容的提问来源于stack exchange,提问作者Paul R
相关产品推荐
相关产品推荐

