Django: Статический тег не загружается в расширенном html при ссылке на изображение, но работает для таблицы стилей CSS?
У меня есть файл 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>
и файл extended.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?
Я проверил несколько сценариев:
- Если я удалю
<img src="{% static 'app/images/image.svg' %}" alt="image">
из файла extended.html, таблица стилей CSS загрузится идеально. - Если я добавлю
{% load static %}
в файл extended.html, то и изображение, и таблица стилей CSS загрузятся.
Я просмотрел документацию Django и убедился, что файл settings.py действительно содержит django.contrib.staticfiles в INSTALLED_APPS и STATIC_URL = "static/".
Я что-то упустил?
Чтобы устранить 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 %}