Evgenii Legotckoi
Evgenii Legotckoi6 января 2019 г. 7:48

Django - Урок 043. template tags для формирования breadcrumb с поддержкой 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 с этими тегами.

# -*- coding: utf-8 -*-

from django import template

register = template.Library()


@register.simple_tag
def breadcrumb_schema():
    return "http://schema.org/BreadcrumbList"


@register.inclusion_tag('core/breadcrumb_home.html')
def breadcrumb_home(url='/', title=''):
    return {
        'url': url,
        'title': title
    }


@register.inclusion_tag('core/breadcrumb_item.html')
def breadcrumb_item(url, title, position):
    return {
        'url': url,
        'title': title,
        'position': position
    }


@register.inclusion_tag('core/breadcrumb_active.html')
def breadcrumb_active(url, title, position):
    return {
        'url': url,
        'title': title,
        'position': position
    }

Если с тегом breadcrumb_schema() все понятно, он просто возвращает определение схемы разметки, то с другими тегами вопросов больше.

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

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

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

В случае двух других тегов нам нужно будет указать позицию.

Шаблоны

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

breadcrumb_home.html

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

breadcrumb_item.html

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

breadcrumb_active.html

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

Applying tags in a template

Ну и приведу кусок кода из шаблона статьи, где это применяется в боевых условиях.

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

Вывод

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

i
  • 9 ноября 2024 г. 6:39

Referring to a health effect, usually of rapid onset, brief, not prolonged; sometimes loosely used to mean severe buy priligy online

Комментарии

Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
AD

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:50баллов,
  • Очки рейтинга-4
m
  • molni99
  • 26 октября 2024 г. 8:37

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:80баллов,
  • Очки рейтинга4
m
  • molni99
  • 26 октября 2024 г. 8:29

C++ - Тест 004. Указатели, Массивы и Циклы

  • Результат:20баллов,
  • Очки рейтинга-10
Последние комментарии
i
innorwall14 ноября 2024 г. 9:54
Django - Урок 003. Модель, шаблон и представление в Django Hair follicles are believed to produce approximately 20 individual hair shafts over the life of the follicle as the follicle progresses through cycles of hair production, shedding ejection, invo…
i
innorwall14 ноября 2024 г. 6:03
Как написать игру на Qt - Урок 3. Взаимодействие с другими объектами what is priligy tablets What happens during the LASIK surgery process
i
innorwall14 ноября 2024 г. 3:09
Использование переменных объявленных в CMakeLists.txt внутри C++ файлов where can i buy priligy online safely Tom Platz How about things like we read about in the magazines like roid rage and does that really
i
innorwall12 ноября 2024 г. 5:12
Django - Урок 055. Как написать функционал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
i
innorwall12 ноября 2024 г. 1:23
QML - Урок 035. Использование перечислений в QML без C++ priligy cvs 24 Together with antibiotics such as amphotericin B 10, griseofulvin 11 and streptomycin 12, chloramphenicol 9 is in the World Health Organisation s List of Essential Medici…
Сейчас обсуждают на форуме
i
innorwall14 ноября 2024 г. 7:39
добавить qlineseries в функции Listen intently to what Jerry says about Conditional Acceptance because that s the bargaining chip in the song and dance you will have to engage in to protect yourself and your family from AMI S…
i
innorwall11 ноября 2024 г. 17:55
Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
9
9Anonim25 октября 2024 г. 16:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов3 октября 2024 г. 11:05
Реализация навигации по разделам Спасибо Евгений!

Следите за нами в социальных сетях