В одном из постов увидел пример “техники”, который раньше использовал в проекте с большим кол-вом приложении и шаблонов. Суть в использовании “прокси-шаблонов” между базовым и конченым шаблонами.
Например, для следующей структуры приложении
- apps
- common
- blogs
- news
- etc…
Подготовлена следующая структура шаблонов:
- templates
- base.html (страница с разметкой на блоки, в блоках default контент)
- index.html (сетка главной)
- page.html (для страниц с placeholder’ами для django-cms)
- news
- news_base.html (прокси шаблон для новостей с названием раздела, например; наследуется от base.html)
- news_list.html (наследуется от news_base.html)
- new_detail.html (наследуется от news_base.html)
- etc…
- blogs
- blogs_base.html (-||-||-)
- blog_post.html (-||-||-)
- etc…
Под наследованием шаблонов, естественно, понимается использование инструкции {% extends %}. Такие конструкции могут быть весьма полезны при использовании “местных” библиотек и стилей в разделе, приложении для публикации баннеров с делением по разделам и пр.
Например использование “местных” библиотек и стилей можно реализовать следующим образом:
<!-- base.html -->
{% spaceless %}{% load i18n %}<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title>{% block title %}{% trans 'Мой супер сайт' %}{% endblock %}</title>
<link href="{{ MEDIA_URL }}styles.css" rel="stylesheet" type="text/css">
<!--[if IE 6]>
<style>
.my-div {width: 100px;}
</style>
<![EndIf]-->
{% block extrahead %}
<link rel="icon" href="{{ MEDIA_URL}}bitmaps/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="{{ MEDIA_URL}}bitmaps/favicon.ico" type="image/x-icon">
{% endblock %}
</head>
<body>
<!-- base_news.html -->
{% extends 'base.html' %}
{% block extrahead %}
<script type="text/javascript" src="{{ MEDIA_URL }}tinymce/jscripts/tiny_mce/tiny_mce.js"></script>
<link href="{{ SITE_MEDIA_URL }}menu.css" rel="stylesheet" type="text/css">
<link rel="icon" href="{{ MEDIA_URL}}bitmaps/news_favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="{{ MEDIA_URL}}bitmaps/news_favicon.ico" type="image/x-icon">
{% endblock extrahead %}
Однако я так уже давно не пишу – стараюсь использовать django-compress везде, где только можно.
Для добавления дополнительных скриптов и стилей в наследниках base_news.html можно использовать инструкцию {{ block.super }} внутри блока extrahead.
А Вы используете такие фишечки в своих джанго проектах?
5 комментариев:
Т.е. описываешь, то что сам не используешь?
Несколько странновато :)
Справедливое замечание. Там после этих слов должен быть пример с компресс-тэгами, но, видимо, я про него забыл. Пример кода #1 с небольшими отличиями я использую до сих пор.
Понять бы ещё что там будет #1
Нормальную вставку листингов не хотел сделать случаем?
Я уже писал об использовании compress'а. Разница будет, как раз, в способе добавления стилей и скриптов на страницу. Т.е. вместо script и style/link тэгов будут тэмплейт-тэги compress'а, для каждой страницы свои группы (в которых будут объединенные и сжатые по всем правилам скрипты и стили).
если честно, не очень понял, где тут "хитрое использование". по-моему это обычная практика построения иерархии шаблонов. на среднем сайте вложенность получается около трех.
и не увидел противоречия с django-compress, буду теперь на продакшне использовать)
Отправить комментарий