Django: Хорошая идея динамически генерировать JS?

StackOverflow https://stackoverflow.com/questions/4253880

  •  27-09-2019
  •  | 
  •  

Вопрос

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

Я думал о том, чтобы иметь Django файлы JS (вместо Apache), поэтому я мог бы воспользоваться тегами шаблона ({% url %} !!!).

Есть ли причина, почему я не должен этого делать?

Или есть правильный способ сделать это?

(Я могу дать как минимум: он будет потреблять много времени, поправка файлов JS, которые не изменились. Что было бы здорово, это иметь приложение, которое генерирует файлы при перезапуске сервера Django и обслуживает их статически после!)

Это было полезно?

Решение 2

Я искал глубже в тех приложениях между активами DjangoPackages., узнал, что Django-MediaGenerator Предоставляет эту функцию, даже если она не хорошо документирована: вы можете генерировать файлы JS или CSS в качестве шаблонов Django, а затем служить их статически (они также связаны, и кэширование управляется и т. Д. ... Так что две птицы с одним камнем + Это действительно легко настроить!).

Для того, чтобы файлы JS генерируются как шаблоны Django (после настройки django-mediagenerator), просто добавьте фильтр:

ROOT_MEDIA_FILTERS = {
    'js': 'mediagenerator.filters.template.Template',
}

В ваших настройках.

Другие советы

Я бы пошел на гибридную технику. Подайте большую часть вашего JavaScript статически. Но в вашем шаблоне Django есть <script> Блок, который определяет различные глобальные переменные, которые генерируются сервером-кодом - url это хороший пример. Тогда ваши статические JS могут ссылаться на переменные, которые генерируются в динамическом коде.

Динамически генерируя JavaScript на вашем сервере может быть чрезвычайно мощным инструментом, и я пережил как в моем проектах.

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

Что я обычно делаю, это иметь блок в заголовке в моем базовом шаблоне. В шаблонах, которые необходимо выполнить пользовательский JavaScript, который известен только во время выполнения (например, настроен на настроив на основе входа в систему пользователя), я добавляю его в блок. Здесь я могу динамически генерировать JavaScript, который я знаю, не будет кэшировать, поэтому я могу сделать некоторые предположения. Недостатком является более сложность.

Если то, что вам нужно, просто указывайте на URL-адреса или иметь некоторую простую конфигурацию и т. Д., Тогда я бы предложил создать представление, которое вернет файл JavaScript с этими настройками. Вы можете установить правильные заголовки (Etag, Cache-Control, ETC), чтобы браузер будет кэшировать файл для некоторого разумного времени. Когда вы обновляете свой код, убедитесь, что ETAG изменится.

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

.Js, которые отправляются в браузер, будут варьироваться. Это может сделать отладку более громоздкими. Может быть, не проблема, но что-то потенциально рассмотреть ...

В настоящее время лучший способ сделать это - использовать Django.js

Вот документ, где они говорят о реверсировании URL: http://djangojs.readtheDocs.org/ru/0.8.1/djangojs.html#Reverse-urls

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top