Производительность от загрузки статического тега Django несколько раз

Если я не ошибаюсь, кажется, что если у вас есть вложенные шаблоны (т. {% include %}Е. Шаблон внутри шаблона), вам иногда придется вызывать {% load static %}несколько «слоев» гнезда. Например, скажем, у меня есть templateA.html:

{% load static %}
<a href={% static "some/path" %}>Some Link</a>
{% include 'templateB.html' %}

А затем в ` {% нагрузки статические %} < A HREF = {% статическими "некоторые / другие / путь" %}> Некоторые Другое Link </ > , у меня есть:

{% load static %}

Насколько я могу судить по тестированию, я должен включить templateB.htmlв оба шаблона, потому templateB.htmlчто не знаю, что я уже загрузил {% static %}тег.

Мой вопрос таков:

Предполагая, что нужно {% static %}дважды загружать тег (или больше раз в зависимости от количества вложенности), будет ли производительность этой дополнительной загрузки?

Я не уверен, что Django делает под капотом, когда вы загружаете этот тег, но моя интуиция заключается в том, что вы не хотите загружать и перезагружать статические файлы. (Поскольку мы говорим о проекте с открытым исходным кодом, я действительно пытался сам подглядывать под капот, как это templatetagреализовано, но это оказалось немного выше моего понимания ...).

Кроме того, этот вопрос предполагает, что необходимо всегда загружать тег таким образом. Если что-то мне не хватает, мне было бы очень интересно узнать больше. Спасибо!

html,django,django-templates,django-staticfiles,

2

Ответов: 3


1 принят

Накладных расходов нет. load staticне загружает и не перезагружает статические файлы; он просто предоставляет доступный (уже загруженный) код в библиотеке templatetags staticfiles для использования в вашем шаблоне.


3

Вы должны написать тег в каждом шаблоне. В случае производительности вам не нужно беспокоиться, так как она никогда не перезагружает или не загружает отдельную новую копию статических файлов.


1

Используя нагрузку, вы добавляете теги и фильтры из какого-либо приложения в контекст для текущего шаблона. Он просто вызывает parser.add_library()парсер и обновляет список тегов и фильтров для этого конкретного шаблона. Вы можете проверить этот метод и получить вызов из тега загрузки. Если вы не хотите загружать что-то, вы можете добавить его в встроенные. Для Django 1.9 вы можете настроить его так:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        'APP_DIRS': True,
        'OPTIONS': {
            'builtins': ['django.templatetags.static'],
        },
    },
]

и для более старых версий

from django.template.loader import add_to_builtins
add_to_builtins('django.templatetags.static')
HTML, Джанго Джанго-шаблоны, Джанго-staticfiles,
Похожие вопросы