Django CMS Тэги шаблонов

24 September 2013 г. 10:05:17

3.1. Тэги шаблонов в CMS

Перед использованием любого тэга шаблонов описанных ниже необходимо загрузить их добавив в самый верх шаблона тэг:

{% load cms_tags %}

 

3.1.1. placeholder

Изменения в версии 2.1 Название плейсхолдера стало чувствительным к регистру.

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

Пример:

{% placeholder "content" %}

 

Если Вы хотите чтобы отображалось дополнительное содежание, в случае если плейсхолдер пустой, воспользуйтесь аргуметом  or и дополнительным закрывающим тэгом {% endplaceholder %}. Все что находится между {% placeholder "..." or %} и {% endplaceholder %} отображается в том случае если плейсхолдер не содержит ни одного плагина или плагины ничего не выводят.

Пример:

{% placeholder "content" or %}There is no content.{% endplaceholder %}

 

Если вы хотите добавить дополнительные переменные в контекст плейсхолдера, вы должны воспользоваться тэгом with  Django. Например, если вы хотите изменить размер изображения в вашем шаблоне при помощи переменных контекста width вы можете воспользоваться следующим кодом:

{% with 320 as width %}{% placeholder "content" %}{% endwith %}

 

Если Вы хотите чтобы плейсхолдер наследовал содержание плейсхолдеров с таким-же именем с родительских страниц, просто передайте соответствующий аргумент inherit:

{% placeholder "content" inherit %}

 

Это заставит пройти вверх по дереву страниц пока и отобразит первый найденный плейсхолдер с содержанием.

Его так же можно комбинировать с аргументом or чтобы показать резервное содержание в том случае если данный плейсхолдер, а также ни один из плейсхолдеров родительских страниц не содержат плагинов которые выводят хоть какое-то содержание:

{% placeholder "content" inherit or %}Ложки нет.{% endplaceholder %}

 

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

3.1.2. show_placeholder

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

Аргументы:

  • placeholder_name
  • page_lookup (Для получения большей информации смотрте  page_lookup)
  • language (опционально)
  • site (опционально)

Примеры:

{% show_placeholder "footer" "footer_container_page" %} 

{% show_placeholder "content" request.current_page.parent_id %} 

{% show_placeholder "teaser" request.current_page.get_root %}

 

3.1.3. page_lookup

Аргумент page_lookup передается для нескольких тэгов шаблонов для получения страницы, может быть любым из следующих типов

  • str: интерпритируется как поле reverse_id страницы, котороем может быть выбрано в секции “Advanced” при редактировании страницы.
  • int: интерпритируется как первичный ключ (поле pk ) заданной страницы
  • dict: словарь содержит ключевые слова в качестве аргументов для поиска заданной страницы (например: {'pk': 1})
  • Page: Вы также можете передать непосредственно объект страницы, в этом случае поск по базе данных происходить не будет.

Если вы знаете страницу на которую вы ссылаетесь, то лучшим выбором будет использование reverse_id (для уникального имени страницы используется строка) это вариант более предпочтительны чем использовать ID в вашем шаблоне. Например, вы можете использовать страницу помощи и хотите иметь ссылку которая отображается в разных частях страницы. Чтобы это сделать, в можете открыть страницу помощи в панели администора и ввести ID (например help) в секции ‘Advanced’. Затем вы можете использовать этот идентификатор в reverse_id для соответствующего тэгов шаблонов:

{% show_placeholder "right-column" "help" %} 

<a href="{% page_url "help" %}">Help page</a>

 

Если вы ссылаетесь на страницу относительно текущей страницы, Вам возможно понадобиться использовать числовой идентификатор или передавать страницу объектом. Например, если вы хотите, чтобы содержание родительской страницы отображалось на текущей страницы, Вы можете использовать::

{% show_placeholder "content" request.current_page.parent_id %}

 

Или, возможно у Вас на странице есть плейсхолдер teaser, и если редактор  не заполнит текущую страницу специфическим содержанием, то он унаследует содержание предка корневого уровня:

{% placeholder "teaser" or %}
     {% show_placeholder "teaser" request.current_page.get_root %} 
{% endplaceholder %}

 

3.1.4. show_uncached_placeholder

Тэг такой-же как и show_placeholder, однако содержание плейсхолдера не будет кэшироваться.

Аргументы:

  • placeholder_name
  • page_lookup (Для получения большей информации смотрте  page_lookup)
  • language (опционально)
  • site (опционально)

Пример:

{% show_uncached_placeholder "footer" "footer_container_page" %}

 

3.1.5. page_url

Отображает URL страницы в соответствии с текущим языком.

Аргументы:

  • page_lookup (Для получения большей информации смотрте  page_lookup)

 

Пример:

<a href="{% page_url "help" %}">Help page</a>

<a href="{% page_url request.current_page.parent %}">Parent page</a>

Если соответствующая страница не найдена и Debug = true, будет вызвано исключение. Таким образом если Debug = false, исколючение не возникнет. К тому же, если SEND_BROKEN_LINK_EMAILS = True и у вас указан какой-либо адрес в MANAGERS, на данный email будет выслан адрес, чтобы проинформировать о плохой ссылке.

3.1.6. page_attribute

Это тэг шаблонов используется для отображение атрибутов текущей странице на текущем языке.

Аргументы:

  • attribute_name
  • page_lookup (Для получения большей информации смотрте  page_lookup)

Возможные значения для attribute_name являются: "title", "menu_title", "page_title", "slug", "meta_description", "meta_keywords" (учитите что Вы так-же можете предоставлять пргументы без кавычек, но этот метод является устаревшим, потому что аргументы могут так-же быть переменными шаблона.

Пример:

{% page_attribute "page_title" %}

Если вы предоставляете аргумент page_lookup, Вы получите значение аргумента на основе странице найденной по этому аргументу.

Пример:

{% page_attribute "page_title" "my_page_reverse_id" %}
{% page_attribute "page_title" request.current_page.parent_id %}
{% page_attribute "slug" request.current_page.get_root %}

Новое в версии2.3.2: Этот тэг поддерживает as аргумент. С помощью его вы можете назначить результат тэга в новую переменную которую Вы можете использовать в любом месте шаблона.

Пример:

{% page_attribute "page_title" as title %}
<title>{{ title }}</title>

Это даже может быть использовано в комбинации с аргументом page_lookup.

Пример:

{% page_attribute "page_title" "my_page_reverse_id" as title %}
<a href="/mypage/">{{ title }}</a>

Новое в  2.4.

3.1.7. render_plugin

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

Аргументы:

plugin

Плагин должен быть экземпляром модели плагина.

Пример:

{% load cms_tags %}
<div class="multicolumn">
{% for plugin in instance.child_plugins %}
        <div style="width: {{ plugin.width }}00px;">
        <div style="width: {{ plugin.width }}00px;">
        {% render_plugin plugin %}
        </div>
{% endfor %}
</div>

 

Обычно потомки плагинов могут быть доступны через атрибут плагина child_plugins. Атрибут плагина allow_children должен быть устновлен в True чтобы активировать.

3.2. Меню тэгов шаблонов

Чтобы использовать любой из тэгов шаблонов, Вы сначала должны загрузить из добавив в в начало шаблона:

{% load menu_tags %}

 

3.2.1. show_menu

Тэг show_menu отображает навигацию текущей страницы. Вы можете переопределить внешний вид и HTML если вы добавите шаблон cms/menu.html в ваш проект или отредактировать шаблон предоставленых в CMS.

 show_menu принимает следующие опциональные параметры: start_level, end_level,extra_inactive и extra_active.

Первые два параметра start_level (по умолчанию=0) и end_level (по умолчанию=100) определяют начиная с какого и до какого уровня будет отображаться навигация. Если домашняя страница является корневой, и Вы не хотите ее отображать вы можете выводить меню только после первого уровня.

Третий параметр extra_inactive (по умолчанию=0), определяет количество уровней навигации, не являющихся наследниками или потомками текущей страницы, которые будут отображены.

И, наконец, четвертый параметр extra_active (по умолчанию=100), определяет количетво уровней потомков текущей страницы, которые будут отображены.

3.2.1.1. Примеры show_menu 

Полное меню в виде вложенного списка:

<ul>
    {% show_menu 0 100 100 100 %}
</ul>

Навигация для текущего уровня в виде вложенного списка:

<ul>
    {% show_menu 0 100 0 100 %}
</ul>

Навигация с только одним дополнительным уровнем:

<ul>
    {% show_menu 0 100 0 1 %}
</ul>

Навигация первого уровня в виде вложенного списка:

<ul>
    {% show_menu 1 %}
</ul>

Навигация с использованием собственного шаблона:

{% show_menu 0 100 100 100 "myapp/menu.html" %}

3.2.2. show_menu_below_id

If you have set an id in the advanced settings of a page, you can display the submenu of this page with a template tag. For example, we have a page called meta that is not displayed in the navigation and that has the id “meta”:

<ul>
    {% show_menu_below_id "meta" %}
</ul> You can give it the same optional parameters as show_menu: <ul>
    {% show_menu_below_id "meta" 0 100 100 100 "myapp/menu.html" %}
</ul>

3.2.3. show_sub_menu

Отображает подменю текущей страницы в виде вложенного списка.

Первый аргумент,  levels (по умолчанию=100), определяет количества уровней в глубину которое будет отображено.

Второй аргумент, root_level (по умолчанию=None), определяет какой уровень, если есть, будет корневым, если root_level =  0  меню будет начинаться с этого уровня несмотря на уровень текущей страницы.

Третий аргумент  nephews (по умолчанию=100), определяет количество уровней  или элементов на том же уровне, будет отображено

Шаблон может быть найден в cms/sub_menu.html:

<ul>
    {% show_sub_menu 1 %}
</ul>

Корневой уровень 0:

<ul>
    {% show_sub_menu 1 0 %}
</ul>

Или используя собственный шаблон:

<ul>
    {% show_sub_menu 1 "myapp/submenu.html" %}
</ul>

3.2.4. show_breadcrumb

Отображает “хлебыные крошки” текущей страницы. Шаблон может быть найден в  cms/breadcrumb.html:

{% show_breadcrumb %}

Или используя собственный шаблон, который выводит только второй уровень или выше:

{% show_breadcrumb 2 "myapp/breadcrumb.html" %}

 

Обычно, в “хлебные крошки” выводятся только видимые страницы, чтобы включить все страницы воспользуйтесь:

{% show_breadcrumb 0 "cms/breadcrumb.html" 0 %}

 

Если текущий URL не управляется CMS или дополнительной навигацией, текущий узел меню не может быть определен. В этом случае Вам может понадобиться предоставить Ваши собственные “хлебные крошки” с помощью шаблона. В основном это надо для таких страниц как страница входа, выхода или сторонние приложения. Это может быть легко сделано при помощи переопределения вашего шаблона.

Например в вашем шаблоне base.html:

<ul>
  {% block breadcrumb %}
  {% show_breadcrumb %}
  {% endblock %}
<ul>

 

И ваш шаблон приложения:

{% block breadcrumb %}
<li><a href="/">home</a></li>
<li>My current page</li>
{% endblock %}

 

3.2.5. page_language_url

Возвращает url текушей страницы для другого языка:

{% page_language_url de %}
{% page_language_url fr %}
{% page_language_url en %}

 

Если текущий url не имеет страниц не связанных с cms и страницы управляются при помощи дополнения навигации и изменение языка основывается на изменении url, то Вам понадобиться установить функцию language_changer используя функцию set_language_changer в cms.utils.

Для получения большей информации смотрите раздел интренационализация.

3.2.6. language_chooser

Тэг language_chooser будет отображать выбор языка на текущей странице. Вы можете изменить шаблон в  menu/language_chooser.html или предоставит свой собственный шаблон, если необходимо.

Пример:

{% language_chooser %}

 

Или используя собственный шаблон:

{% language_chooser "myapp/language_chooser.html" %}

 

language_chooser испольщует три различных режима которые будут отображаться языки. Вы можете выбрать:

  • raw (по умолчанию) 
  • naitive
  • current
  • short

Режим может быть передан строкой в качестве последнего аргумента language_chooser tag.  В режме“raw”, язык будет отображаться так же как отображется полное имя  в настройках. В режиме “native” язык будет отображаться на родном языке (например немецкий будет отображаться как “Deutsch”, Японскйи как “日本語” и так далее). В режиме “current” языки будут переведены на тот язык, который установлен у пользователя в данный момент ( например, если сайт отображается на немецком, то японский язык будет отображаться как “Japanisch”). Режим “Short” отображает только код  языка (например “en”).

Если текущий url не 

Если текущий url не имеет страниц не связанных с cms и страницы управляются при помощи дополнения навигации и изменение языка основывается на изменении url, то Вам понадобиться установить функцию language_changer используя функцию set_language_changer в cms.utils.

Для получения большей информации смотрите раздел интренационализация.

3.3. Тэги шаблонов для панели инструментов

Тэг cms_toolbar включается в библиотеку cms_tags и потребует css и javascript в блоках sekizai blocks базавого шаблона. Этот тэг должен быть расположен после тэга <body> и перед первым использованием {% cms_plaseholder%} в вашем  HTML.

Пример:

<body>
{% cms_toolbar %}
{% placeholder "home" %}
...

 


Оставьте свой комментарий

comments powered by Disqus
Меню

Cult of digits 2014 Яндекс.Метрика