2012-03-07 3 views
0

У меня есть некоторые данные в моей модели, которые постоянно отображаются с использованием того же html/js/css. Я испытываю соблазн придумать настраиваемый шаблон, чтобы упростить рендеринг модели примерно на {% create_component mymodel %}. Но проблема в том, что css/js также включен, и я хотел бы, чтобы это автоматически добавлялось в начало страницы (не где-то в теле страницы)Как написать повторно используемый компонент html/css/js в django?

Есть ли способ сделать это?

Спасибо!

+0

Почему бы не разделить его и иметь 3 templatetags? 'create_html',' create_css', 'create_js' и т. д.? – bonsaiviking

+0

В основном, чтобы код был чистым и придерживался DRY. Что, если я забуду один или два из трех тегов? Что делать, если мне не нужно отображать этот компонент? (Мне нужно будет повторить «если» 3 раза и надеюсь, что я не опечатаю). Я просто пытаюсь понять, могу ли я избежать боли, которая может возникнуть из наивного решения. – Sandro

+0

Я никогда не делал пользовательские теги шаблона django, но если вы можете [re] определить в нем шаблонные блоки django, если в вашем базовом шаблоне у вас будут блоки для css, js, вы сможете добавить к этим блокам все, что захотите. Итак, вы можете сделать '{% create_component mymodel css_block js_block%}', который будет отображать html на месте и добавлять соответствующие css и js в соответствующие блоки – miki725

ответ

0

Я написал 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.

Смежные вопросы