Evgenii Legotckoi
Evgenii Legotckoi20 вересня 2016 р. 13:20

Django - Підручник 005. Додавання RSS-каналів на сайт на Django

Поки статей ще не багато на новому сайті, додам я RSS-стрічку , благо, що Django має вбудований функціонал для організації RSS-стрічок, як у звичайному форматі, так і у форматі Atom. Але для початку обмежусь додаванням звичайно стрічки новин, яка може бути підключена до сервісу FeedBurner, а також знайдена на сайті будь-яким RSS-рідером. Я, наприклад, використовую QuiteRSS , який, до речі, написаний на Qt5.


Що потрібно для організації RSS-стрічки в мінімальному варіанті:

  1. Додати посилання на стрічку до тіла head -тега сторінки;
  2. Написати уявлення, яке відповідатиме за підготовку стрічки;
  3. Модифікувати модель, по об'єктах якої будуватиметься стрічка новин.

Додавання посилання на RSS-стрічку

Для початку додамо посилання на RSS-стрічку в заголовок сторінки. Навіщо це потрібно? - Це необхідно для того, щоб RSS-рідери могли без проблем виявити стрічку під час сканування сайту. Якщо не вказати посилання, то користувачеві доведеться вручну шукати вашу RSS-стрічку.

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

У цьому випадку RSS-стрічка вказана на адресу feed.

Реалізація уявлення

Для реалізації представлення нам знадобиться клас Feed, а також імпортувати ту модель, по об'єктах якої будуватиметься стрічка новин. Природно обрана модель Article, про яку я вже розповідав у статті по Моделі, Шаблону та Подання , які використовуються на цьому сайті.

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>"

Отже, щоб скористатися можливостями RSS-стрічки, необхідно успадковуватися від класу Feed. Перевизначити поле title, яке буде назвою вашого RSS-каналу, перевизначити поле description, яке є описом вашого RSS-каналу, а також обов'язково вказати адресу каналу, але оскільки у мене цим каналом є головна сторінка сайту, то як посилання вказано сліш.

УВАГА: Якщо не вказати посилання хоча б так, сипатимуться помилки, і нічого не запрацює.

Метод items повертає 10 останніх статей, за винятком тих, що мають статус чернетки.

Метод item_title відповідно підставляє назву статті.

Метод item_description підставляє опис статті з поля article_content у моделі. При цьому в опис потрапляють перші 400 символів у статті та додатковий підпис із зворотним посиланням на сайт. Зворотне посилання на сайт зроблено, щоб агрегатори новин, які будуть пастися на вашому сайті, залишали зворотні посилання на сайт у себе.

Модифікація Моделі Article

Ключовим моментом є те, що обов'язково наявність методу get_absolute_url, який також використовується уявленням RSS-стрічки. Даний метод повертає абсолютну адресу сторінки і без неї також сипатимуться помилки.

Ось такий метод доданий до моделі Article.

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

Статті знаходяться в модулі знання і поділяються за розділами. Тому для формування повної адреси використовується дві змінні:

  1. адреса розділу
  2. id статті

URL шаблон виглядає так:

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

Додавання шаблону URL для RSS

І щоб все запрацювало, залишилося додати шаблон URL для RSS. У мене даний шаблон знаходиться у модулі home , як і вся стрічка новин, крім моделі статей. І виглядає цей шаблон так.

from django.conf.urls import url

from . import views

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

Для Django рекомендую VDS-сервер хостера Timeweb .

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

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

Илья Чичак
  • 11 грудня 2018 р. 09:52

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

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

from <application_name> import <module_name>

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

from . import <module_name>

или

from <application_name> import *

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

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

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

Evgenii Legotckoi
  • 11 грудня 2018 р. 10:06

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

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

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

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

from .<module_name> import <filename>

Коментарі

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
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
innorwall11 листопада 2024 р. 14:19
Алгоритм сортування купою The role of raloxifene in preventing breast cancer priligy precio
i
innorwall11 листопада 2024 р. 13:55
PyQt5 - Урок 006. Робота з QTableWidget buy priligy 60 mg 53 have been reported by Javanovic Santa et al
Тепер обговоріть на форумі
i
innorwall11 листопада 2024 р. 20:56
добавить qlineseries в функции buy priligy senior brother Chu He, whom he had known for many years
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
Реализация навигации по разделам Спасибо Евгений!

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