Django:链接图像时静态标签未加载到扩展 html 上,但适用于 CSS 样式表?

问题描述 投票:0回答:1

我有一个layout.html文件,如下:

{% load static %}
<!DOCTYPE html>
<html lang="en">
    <head>
        <link href="{% static 'app/styles.css' %}" rel="stylesheet">
    </head>
    <body>
        {% block body %}
        {% endblock %}
    </body>
</html>

和扩展的.html如下:

{% extends "layout.html" %}

{% block body %}
    <div class="maincontainer">
        <h1>Extended</h1>
        <img src="{% static 'app/images/image.svg' %}" alt="image">
    </div>
{% endblock %}

当我加载 exnteded.html 时,出现以下错误:

django.template.exceptions.TemplateSyntaxError: Invalid block tag on line 13: 'static', expected 'empty' or 'endfor'. Did you forget to register or load this tag?

我测试了一些场景:

  1. 如果我从extend.html 中删除
    <img src="{% static 'app/images/image.svg' %}" alt="image">
    ,CSS 样式表将完美加载。
  2. 如果我将
    {% load static %}
    添加到 Extended.html,图像和 CSS 样式表都会加载。

我查看了 Django 文档,并确保 settings.py 文件在 INSTALLED_APPS 和 STATIC_URL =“static/”中确实有 django.contrib.staticfiles。

我在这里遗漏了什么吗?

django django-templates django-staticfiles
1个回答
0
投票

要在扩展另一个子模板的子模板中使用

TemplateSyntaxError
时解决
{% static %}
问题,请确保在使用静态标签的每个子模板中包含
{% load static %}
。这种显式加载是必要的,因为在父模板中加载的模板标签在子模板中不会自动可用:

{% extends "layout.html" %}
{% load static %}  <!-- Ensure static is loaded in the child template -->

{% block body %}
    <div class="maincontainer">
        <h1>Extended</h1>
        <img src="{% static 'app/images/image.svg' %}" alt="image">
    </div>
{% endblock %}
© www.soinside.com 2019 - 2024. All rights reserved.