Evgenii Legotckoi
Evgenii Legotckoi6. Januar 2019 07:48

Django - Tutorial 043. Template-Tags zum Breadcrumb-Bilden mit shema.org-Unterstützung

Ich teile meine Implementierung integrierter Tags zum Bilden von Breadcrumb mit Unterstützung für schema.org-Markup sowie Unterstützung für Bootstrap-CSS.

Diese Tags wurden geschrieben, um die Website-Entwicklung zu beschleunigen. Die Arbeit schreitet jetzt viel schneller voran, da der Code kompakter ist, und es ist viel einfacher, Fehler im Breadcrumb-Markup zu beheben, da Sie den Code jetzt nur noch an einer Stelle korrigieren müssen.


Nehmen wir an, Sie haben einen Anwendungskern, der für einige allgemeine Funktionen verantwortlich ist, und er hat ein template_tags -Verzeichnis mit einer core.py -Datei, um alle integrierten Tags zu generieren. Fügen Sie 3 Include-Tags und ein einfaches Tag hinzu, um 4 Breadcrumb-Komponenten zu bilden.

  • breadcrumb_schema - aktuelles Schema aus schema.org-Markup speichern
  • breadcrumb_home - um den Stamm der Seite zu bilden
  • breadcrumb_item - zum Bilden von Elementen des Seitenstrukturbaums
  • breadcrumb_active - um das Element der aktuellen Seite der Website zu bilden

core.py

Sehen Sie sich den Inhalt der Python-Datei mit diesen Tags an.

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

Wenn mit dem Tag breadcrumb_schema() alles klar ist, gibt es einfach die Markup-Schema-Definition zurück, dann gibt es weitere Fragen mit anderen Tags.

Das gesamte Markup wird aus drei Hauptparametern gebildet:

  • URL - Link zur Produktseite
  • Titel - Seitentitel
  • position - alle Elemente im Markup müssen nummeriert werden. Zum Beispiel 0, 1, 2, 3 usw.

Für breadcrumb_home() füge ich keine Position hinzu, weil es keinen Sinn macht, es wird immer Position 0 sein. Außerdem gibt es in meinem Fall anstelle eines Titels ein Symbol, also wird die Vorlage es tun unterschiedlich aussehen. ein.

Bei den anderen beiden Tags müssen wir die Position angeben.

Vorlagen

Ich werde sofort eine Reservierung über das Home-Symbol vornehmen. Ich verwende das Material Design Icons -Paket, daher wird es ein span -Tag mit mdi mdi-home geben. Klassen.

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>

Anwenden von Tags in einer Vorlage

Nun, ich werde ein Stück Code aus der Artikelvorlage geben, wo es unter Kampfbedingungen verwendet wird.

{% 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>

Fazit

Stellen Sie sich nun vor, dass Sie anstelle dieser 9 Zeilen in der Artikelvorlage jede Komponente für das richtige Markup schreiben müssten. Die Anzahl der Codezeilen würde sich verdreifachen, und mit der Zunahme dieser monotonen Funktionalität wird es schwieriger, den Site-Code zu warten und schnell zu beheben.

Рекомендуємо хостинг TIMEWEB
Рекомендуємо хостинг TIMEWEB
Stabiles Hosting des sozialen Netzwerks EVILEG. Wir empfehlen VDS-Hosting für Django-Projekte.

Magst du es? In sozialen Netzwerken teilen!

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
ИМ
Игорь Максимов5. Oktober 2024 07:51
Django – Lektion 064. So schreiben Sie eine Python-Markdown-Erweiterung Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
d
dblas55. Juli 2024 11:02
QML - Lektion 016. SQLite-Datenbank und das Arbeiten damit in QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
k
kmssr8. Februar 2024 18:43
Qt Linux - Lektion 001. Autorun Qt-Anwendung unter Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
Qt WinAPI - Lektion 007. Arbeiten mit ICMP-Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
EVA
EVA25. Dezember 2023 10:30
Boost - statisches Verknüpfen im CMake-Projekt unter Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
Jetzt im Forum diskutieren
J
JacobFib17. Oktober 2024 03:27
добавить qlineseries в функции Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты https://topdecorpro.ru…
JW
Jhon Wick1. Oktober 2024 15:52
Indian Food Restaurant In Columbus OH| Layla’s Kitchen Indian Restaurant If you're looking for a truly authentic https://www.laylaskitchenrestaurantohio.com/ , Layla’s Kitchen Indian Restaurant is your go-to destination. Located at 6152 Cleveland Ave, Colu…
КГ
Кирилл Гусарев27. September 2024 09:09
Не запускается программа на Qt: точка входа в процедуру не найдена в библиотеке DLL Написал программу на C++ Qt в Qt Creator, сбилдил Release с помощью MinGW 64-bit, бинарнику напихал dll-ки с помощью windeployqt.exe. При попытке запуска моей сбилженной программы выдаёт три оши…
F
Fynjy22. Juli 2024 04:15
при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …

Folgen Sie uns in sozialen Netzwerken