Я написал django templatetag для labjs используя очереди. Помимо преимуществ сокращенного блокирования ресурсов, он также упростил создание компонентов, которые включают в себя собственный javascript, не беспокоясь о производительности или двойных вызовах.
Если вы загружаете файл javascript дважды, он игнорирует второй вызов, и, комбинируя его с django compress, вы можете создавать «пакеты». Это все еще не идеально, и я ищу письмо django-приложения, которое использует headjs, и делает более зрелым или всеобъемлющим приложение для обработки повторно используемых компонентов django, которые включают html и css.
Это будет работать для js, но для css вы можете сделать что-то подобное, js-библиотеку для динамической загрузки css-файлов.
Преимущество обработки этого на стороне клиента заключается в том, что вы получаете антиблокировочные преимущества отложенной загрузки.
Если вы просто хотите простой и простой серверный способ, то вы ищете реестр css/js. Вы можете легко написать промежуточное программное обеспечение, которое выводит все «зарегистрированные» js и css в голове, и вы можете включить некоторые css/js, зарегистрированные в вашей пользовательской модели templatetag.
Возможно, вы сможете использовать или повторно использовать django-assets.
Почему бы не разделить его и иметь 3 templatetags? 'create_html',' create_css', 'create_js' и т. д.? – bonsaiviking
В основном, чтобы код был чистым и придерживался DRY. Что, если я забуду один или два из трех тегов? Что делать, если мне не нужно отображать этот компонент? (Мне нужно будет повторить «если» 3 раза и надеюсь, что я не опечатаю). Я просто пытаюсь понять, могу ли я избежать боли, которая может возникнуть из наивного решения. – Sandro
Я никогда не делал пользовательские теги шаблона django, но если вы можете [re] определить в нем шаблонные блоки django, если в вашем базовом шаблоне у вас будут блоки для css, js, вы сможете добавить к этим блокам все, что захотите. Итак, вы можете сделать '{% create_component mymodel css_block js_block%}', который будет отображать html на месте и добавлять соответствующие css и js в соответствующие блоки – miki725