Evgenii Legotckoi
Evgenii Legotckoi06 січня 2019 р. 07: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 з цими тегами.

# -*- 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>

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

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

{% 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
  • 09 листопада 2024 р. 06:39

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

Коментарі

Only authorized users can post comments.
Please, Log in or Sign up
AD

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

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

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

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

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

  • Результат:20бали,
  • Рейтинг балів-10
Останні коментарі
i
innorwall13 листопада 2024 р. 23:03
Як зробити гру за допомогою Qt - Урок 3. Взаємодія з іншими об&#39;єктами what is priligy tablets What happens during the LASIK surgery process
i
innorwall13 листопада 2024 р. 20: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
innorwall11 листопада 2024 р. 22:12
Django - Урок 055. Як написати функціонал auto populate field Freckles because of several brand names retin a, atralin buy generic priligy
i
innorwall11 листопада 2024 р. 18: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
innorwall11 листопада 2024 р. 15:50
Qt/C++ - Урок 052. Налаштування Qt Audio player в стилі AIMP It decreases stress, supports hormone balance, and regulates and increases blood flow to the reproductive organs buy priligy online safe Promising data were reported in a PDX model re…
Тепер обговоріть на форумі
i
innorwall14 листопада 2024 р. 00: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 р. 10: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 р. 09:10
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
ИМ
Игорь Максимов03 жовтня 2024 р. 04:05
Реализация навигации по разделам Спасибо Евгений!

Слідкуйте за нами в соціальних мережах