Django {% load static %}の位置について

Djangoの{% load static %}は同一のファイル内でしか有効でない。

ロードすべき箇所に注意しないと、以下のようなエラーが表示される。

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

×ダメな例

{# app/base.htmlの中で`load static`している #}
{% extends 'app/base.html' %}
{% block content %}
    <p>content here</p>
{% endblock %}

{% block extra_js %}
{# 下の行でコケる #}
<script src="{% static 'app/js/jsfile.js' %}"></script>
{% endblock %}

○良い例

{% extends 'app/base.html' %}
{% load static %}  {# <--これが大切 #}
{% block content %}
    <p>content here</p>
{% endblock %}

{% block extra_js %}
{# 無事レンダリングされる #}
<script src="{% static 'app/js/jsfile.js' %}"></script>
{% endblock %}

公式 https://docs.djangoproject.com/en/2.2/howto/custom-template-tags/ に同一ファイル内で使えるという趣旨の記述があった。

You can extend the template engine by defining custom tags and filters using Python, and then make them available to your templates using the {% load %} tag.

覚えておこう。

広告

現場で使える Django の教科書《基礎編》
横瀬 明仁
NextPublishing Authors Press (2018-08-26)
売り上げランキング: 21,700


タイトルとURLをコピーしました