Evgenii Legotckoi
Evgenii Legotckoi20. September 2016 13:20

Django - Tutorial 005. RSS-Feeds zur Site auf Django hinzufügen

Obwohl es noch nicht viele Artikel auf der neuen Site gibt, werde ich einen RSS-Feed hinzufügen, da Django über integrierte Funktionen zum Organisieren von RSS-Feeds verfügt, sowohl im regulären Format als auch im Atom-Format. Aber zunächst beschränke ich mich darauf, normalerweise einen Newsfeed hinzuzufügen, der mit dem FeedBurner-Dienst verbunden werden kann und auch von einigen RSS-Readern auf der Site gefunden werden kann. Ich verwende zum Beispiel QuiteRSS , das übrigens in Qt5 geschrieben ist.


Mindestanforderungen für die Organisation eines RSS-Feeds:

  1. Fügen Sie einen Link zum Feed zum Textkörper Kopf - Seiten-Tag hinzu;
  2. Schreiben Sie eine Präsentation, die für die Vorbereitung des Bandes verantwortlich ist;
  3. Ändern Sie das Modell, auf dessen Grundlage der Newsfeed erstellt wird.

Hinzufügen eines Links zu einem RSS-Feed

Zuerst fügen wir im Titel der Seite einen Link zum RSS-Feed hinzu. Warum wird das benötigt? - Dies ist notwendig, damit RSS-Reader den Feed beim Crawlen der Site leicht erkennen können. Wenn Sie keinen Link angeben, muss der Benutzer manuell nach Ihrem RSS-Feed suchen.

<head>
...
<link rel="home" type="application/rss+xml" href="http://example.com/feed" />
...
</head>

In diesem Fall befindet sich der RSS-Feed unter feed.

Implementieren einer Ansicht

Um die Ansicht zu implementieren, benötigen wir die Feed, Klasse, sowie den Import des Modells, auf dessen Grundlage der Newsfeed aufgebaut wird. Natürlich wird das Artikelmodell gewählt, worüber ich bereits im Artikel zu [Modell, Vorlage und Ansicht] gesprochen habe (../../../../../knowledge / django / 5 / ), die auf dieser Website verwendet werden.

from django.contrib.syndication.views import Feed
from knowledge.models import *


class ArticlesFeed(Feed):
    title = "EVILEG - Практическое программирование"
    description = "Последние статьи сайта EVILEG о программировании и информационных технологиях"
    link = "/"

    def items(self):
        return Article.objects.exclude(article_status=False).order_by('-article_date')[:10]

    def item_title(self, item):
        return item.article_title

    def item_description(self, item):
        return item.article_content[0:400] + "<p>Статья впервые появилась на <a href="\"https://evileg.com/ru\"">EVILEG " \
                                "- Практическое программирование</a></p>"

Um die Funktionen eines RSS-Feeds zu nutzen, müssen Sie also von der Feed-Klasse erben. Überschreiben Sie das Titelfeld, das der Name Ihres RSS-Feeds ist, überschreiben Sie das Beschreibungsfeld, das die Beschreibung Ihres RSS-Feeds ist, und geben Sie auch die Adresse des Kanals an, da dieser Kanal jedoch die Hauptseite von . ist der Site habe ich einen Schrägstrich als Link.

ACHTUNG: Wenn Sie den Link trotzdem nicht angeben, werden Fehler angezeigt und nichts funktioniert.

Die Methode items gibt die 10 neuesten Artikel zurück, mit Ausnahme der Artikel mit Entwurfsstatus.

Die Methode item \ _title ersetzt den Titel des Artikels entsprechend.

Die Methode item \ _description ersetzt die Artikelbeschreibung aus dem Feld article \ _content im Modell. In diesem Fall umfasst die Beschreibung die ersten 400 Zeichen des Artikels und eine zusätzliche Signatur mit Backlink zur Site. Ein Backlink zur Site wird erstellt, damit Nachrichtenaggregatoren, die auf Ihrer Site grasen, selbst Backlinks zu der Site hinterlassen.

Artikelmodell ändern

Der entscheidende Punkt ist, dass Sie eine get \ _absolute \ _url-Methode haben müssen, die auch von der RSS-Feed-Ansicht verwendet wird. Diese Methode gibt die absolute Adresse der Seite zurück, und ohne sie werden auch Fehler ausgegeben.

Diese Methode wurde dem Modell Artikel hinzugefügt.

def get_absolute_url(self):
    return reverse('knowledge:article', kwargs={'section': self.article_section.section_url,
                                                'article_id': self.id})

Die Artikel befinden sich im Wissensmodul und sind in Abschnitte unterteilt. Daher werden zwei Variablen verwendet, um die vollständige Adresse zu bilden:

1.Abschnittsadresse
2.id des Artikels

Das URL-Muster sieht so aus:

url(r'^(?P[\w]+)/(?P<article_id>[0-9]+)/$', views.EArticleView.as_view(), 

Hinzufügen einer RSS-URL-Vorlage

Und damit es funktioniert, müssen Sie nur die URL-Vorlage für den RSS hinzufügen. Ich habe diese Vorlage im home -Modul, wie der gesamte Newsfeed, mit Ausnahme des Artikelmodells. Und diese Vorlage sieht so aus.

from django.conf.urls import url

from . import views

urlpatterns = [
    url(r'^feed/$', views.ArticlesFeed()),
]

Für Django empfehle ich Timeweb Hosting VDS Server .

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

Magst du es? In sozialen Netzwerken teilen!

Илья Чичак
  • 11. Dezember 2018 09:52

Тут мне тоже есть что сказать=)

Сами разрабы советуют импортировать следующим образом:

from <application_name> import <module_name>

Стоит избегать

from . import <module_name>

или

from <application_name> import *

в первом случае некоторым IDE срывает крышу=) (а вообще это несколько опасно, особенно в случае с джангой - можно импортнуть не то и не оттуда)

а во втором может случиться коллизия, например в двух модулях есть классы с одним и тем же именем (ну мало ли). и вот не угадаешь, какой будет в итоге=)

Явное лучше неявного=)

Evgenii Legotckoi
  • 11. Dezember 2018 10:06

Что интересно, если написать так

from <application_name>.<module_name> import <filename>

,то PyCharm сносит крышу, если разрабатываешь в рамках проекта приложение, которое подготавливается в качестве самостоятельного приложения, которое в дальнейшем можно будет устанавливать через pip . То есть если оно имеет структуру гит репозитория, как, например, evileg_core

PyCharm вообще не понимает, что происходит.
приходится писать так

from .<module_name> import <filename>

Kommentare

Nur autorisierte Benutzer können Kommentare posten.
Bitte Anmelden oder Registrieren
Letzte Kommentare
A
ALO1ZE19. Oktober 2024 08:19
Fb3-Dateileser auf Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Игорь Максимов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> в заголовочном файле не работает валидатор.
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