Evgenii Legotckoi
06 січня 2019 р. 18:48

Django – Підручник 043. шаблонні теги для формування хлібної крихти з підтримкою shema.org

Ділюсь своєю реалізацією вбудованих тегів для формування breadcrumb з підтримкою розмітки schema.org, а також підтримкою bootstrap css.

Написав ці мітки, щоб прискорити швидкість розробки сайту. Тепер робота просувається набагато швидше, тому що код став компактнішим, а виправляти помилки в розмітці хлібних крихт стало набагато простіше, тому що тепер виправляти код потрібно тільки в одному місці.


Допустимо, у вас є ядро програми, яке відповідає за якийсь загальний функціонал і в ньому є директорія template_tags з файлом core.py для формування всіх вбудованих тегів. Додайте 3 теги включення та один простий тег, щоб сформувати 4 компоненти хлібної крихти.

  • breadcrumb_schema - зберегти поточну схему із розмітки schema.org
  • breadcrumb_home - для формування кореня сайту
  • breadcrumb_item – для формування елементів дерева структури сайту
  • breadcrumb_active - для формування елемента поточної сторінки сайту

core.py

Перегляньте вміст python з цими тегами.

  1. # -*- coding: utf-8 -*-
  2.  
  3. from django import template
  4.  
  5. register = template.Library()
  6.  
  7.  
  8. @register.simple_tag
  9. def breadcrumb_schema():
  10. return "http://schema.org/BreadcrumbList"
  11.  
  12.  
  13. @register.inclusion_tag('core/breadcrumb_home.html')
  14. def breadcrumb_home(url='/', title=''):
  15. return {
  16. 'url': url,
  17. 'title': title
  18. }
  19.  
  20.  
  21. @register.inclusion_tag('core/breadcrumb_item.html')
  22. def breadcrumb_item(url, title, position):
  23. return {
  24. 'url': url,
  25. 'title': title,
  26. 'position': position
  27. }
  28.  
  29.  
  30. @register.inclusion_tag('core/breadcrumb_active.html')
  31. def breadcrumb_active(url, title, position):
  32. return {
  33. 'url': url,
  34. 'title': title,
  35. 'position': position
  36. }

Якщо з тегом breadcrumb_schema() все зрозуміло, він повертає визначення схеми розмітки, то з іншими тегами питань більше.

Вся розмітка формується із трьох основних параметрів:

  • url - посилання на сторінку товару
  • title - Заголовок сторінки
  • position - всі елементи в розмітці мають бути пронумеровані. Наприклад, 0, 1, 2, 3 тощо.

Для breadcrumb_home() я не додаю жодної позиції, тому що в ній немає сенсу, завжди буде позиція 0. Крім того, в моєму випадку замість заголовка іконка, тому шаблон матиме інший вигляд. один.

У випадку двох інших тегів, нам потрібно буде вказати позицію.

Шаблони

Відразу обмовлюся про домашню іконку. Я використовую пакет Material Design Icons , тому буде тег span із класами mdi mdi-home .

breadcrumb_home.html

  1. <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
  2. <a itemprop="item" href="{{ url }}">
  3. <span class="mdi mdi-home">
  4. <span class="d-none" itemprop="name">{{ title }}</span>
  5. </span>
  6. </a>
  7. <meta itemprop="position" content="1" />
  8. </li>

breadcrumb_item.html

  1. <li class="breadcrumb-item" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
  2. <a itemprop="item" href="{{ url }}">
  3. <span itemprop="name">{{ title }}</span>
  4. </a>
  5. <meta itemprop="position" content="{{ position }}" />
  6. </li>

breadcrumb_active.html

  1. <li class="breadcrumb-item active" itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">
  2. <link itemprop="item" href="{{ url }}">
  3. <span itemprop="name">{{ title }}</span>
  4. <meta itemprop="position" content="{{ position }}" />
  5. </li>

Застосування тегів у шаблоні

Ну і наведу шматок коду із шаблону статті, де це застосовується у бойових умовах.

  1. {% extends 'home/base.html' %}
  2. {% load core %}
  3. <ul class="breadcrumb bg-light" itemscope itemtype="{% breadcrumb_schema %}">
  4. {% url 'home:index' as home_index_url %}
  5. {% breadcrumb_home home_index_url 'EVILEG' %}
  6. {% url 'knowledge:index' as knowledge_index_url %}
  7. {% breadcrumb_item knowledge_index_url _('Articles') 2 %}
  8. {% breadcrumb_item article.section.get_absolute_url article.section.title 3 %}
  9. {% breadcrumb_active article.get_absolute_url article.title 4 %}
  10. </ul>

Висновок

А тепер уявіть, що замість цих 9 рядків у шаблоні статті вам довелося прописувати кожен компонент для правильної розмітки. Кількість рядків коду збільшилася б утричі, а зі збільшенням цього монотонного функціоналу стає складніше підтримувати код сайту та швидко його виправляти.

Рекомендовані статті на цю тему

По статті запитували0питання

1

Вам це подобається? Поділіться в соціальних мережах!

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
  • Останні коментарі
  • Evgenii Legotckoi
    16 квітня 2025 р. 17:08
    Благодарю за отзыв. И вам желаю всяческих успехов!
  • IscanderChe
    12 квітня 2025 р. 17:12
    Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
  • AK
    01 квітня 2025 р. 11:41
    Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
  • Evgenii Legotckoi
    09 березня 2025 р. 21:02
    К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
  • VP
    09 березня 2025 р. 16:14
    Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…