feeds.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. from django.contrib.syndication.views import Feed
  2. from django.urls import reverse
  3. from django.utils.html import strip_tags
  4. from django.utils.feedgenerator import Atom1Feed
  5. from blog.models import Blog, Cat_Blog
  6. class LatestArticlesFeed(Feed):
  7. """
  8. Flux RSS pour les derniers articles du blog
  9. """
  10. title = "Blog Duhaz - Derniers articles"
  11. link = "/blog/"
  12. description = "Les derniers articles publiés sur le blog Duhaz"
  13. # Métadonnées du flux
  14. author_name = "Mr Duhaz"
  15. feed_copyright = "Copyright (c) Duhaz"
  16. # Nombre d'articles dans le flux
  17. feed_size = 20
  18. def items(self):
  19. """Retourne les derniers articles publiés"""
  20. return Blog.objects.filter(b_publier=True).order_by('-b_publdate')[:self.feed_size]
  21. def item_title(self, item):
  22. """Titre de l'article"""
  23. return item.b_titre
  24. def item_description(self, item):
  25. """Description de l'article (sans HTML)"""
  26. return strip_tags(item.b_description)
  27. def item_link(self, item):
  28. """Lien vers l'article"""
  29. return reverse('blog_play', args=[item.b_titre_slugify])
  30. def item_pubdate(self, item):
  31. """Date de publication"""
  32. return item.b_publdate
  33. def item_categories(self, item):
  34. """Catégories de l'article"""
  35. return [cat.cb_titre for cat in item.b_cat.all()]
  36. def item_author_name(self, item):
  37. """Auteur de l'article"""
  38. return "Mr Duhaz"
  39. class LatestArticlesAtomFeed(LatestArticlesFeed):
  40. """
  41. Flux Atom pour les derniers articles (alternative au RSS)
  42. """
  43. feed_type = Atom1Feed
  44. subtitle = LatestArticlesFeed.description
  45. class CategoryArticlesFeed(Feed):
  46. """
  47. Flux RSS par catégorie
  48. """
  49. author_name = "Mr Duhaz"
  50. feed_copyright = "Copyright (c) Duhaz"
  51. feed_size = 20
  52. def get_object(self, request, cat_slug):
  53. """Récupère la catégorie depuis l'URL"""
  54. return Cat_Blog.objects.get(cb_titre_slgify=cat_slug)
  55. def title(self, obj):
  56. return f"Blog Duhaz - Articles de la catégorie {obj.cb_titre}"
  57. def link(self, obj):
  58. return reverse('blog_cat', args=[obj.cb_titre_slgify])
  59. def description(self, obj):
  60. return f"Les derniers articles de la catégorie {obj.cb_titre}"
  61. def items(self, obj):
  62. """Retourne les articles de la catégorie"""
  63. return Blog.objects.filter(
  64. b_publier=True,
  65. b_cat=obj
  66. ).order_by('-b_publdate')[:self.feed_size]
  67. def item_title(self, item):
  68. return item.b_titre
  69. def item_description(self, item):
  70. return strip_tags(item.b_description)
  71. def item_link(self, item):
  72. return reverse('blog_play', args=[item.b_titre_slugify])
  73. def item_pubdate(self, item):
  74. return item.b_publdate
  75. def item_categories(self, item):
  76. return [cat.cb_titre for cat in item.b_cat.all()]