BLOG
웹 개발

Django에서 RSS 피드 생성하기


Feb. 6, 2022, 11:16 p.m.



블로그성 웹사이트에서는 RSS 피드를 자주 사용하는 모습을 볼 수 있습니다.

그럼 RSS는 정확히 무엇일까요? RSS는 Rich Site Summary 또는 Really Simple Syndication의 약자입니다.

RSS는 어떤 웹사이트에 새로운 컨텐츠가 생겨났을 때 해당 웹사이트에 직접 방문하지 않아도 RSS 서비스를 통해서 그 컨텐츠를 이용하기 위해 사용됩니다. 요즘은 직접 RSS를 통해 구독하는 경우는 보지 못했지만 RSS를 검색엔진에 제공해서 새로운 웹페이지들을 빠르게 색인시키기 위해서도 사용된다고 합니다.

그럼 Django에서 RSS피드를 쉽게 생성하는 방법을 알아볼까요?

Django는 자체적으로 피드를 생성하는 모듈을 보유하고 있습니다. 바로 django.contrib.syndication.views 인데요, 이 모듈을 사용해 간단하게 RSS 피드를 생성해 보겠습니다.

먼저 피드를 생성할 컨텐츠가 필요하겠죠? 간단하게 아래와 같이 Blog 앱에 Post 모델이 선언되어 있다고 가정하겠습니다.

blog/models.py

class Post(models.Model):
  title = models.CharField(max_length=100)
  content = MarkdownxField()
  created_at = models.DateTimeField(auto_now_add=True)

  def get_absolute_url(self):
    return f'/blog/{self.pk}/'

최상위 urls.py가 있는 폴더에 feed.py를 생성하고 아래와 같이 작성해줍니다.

feed.py

from django.contrib.syndication.views import Feed
from blog.models import Post

class RecentPostsFeed(Feed):
    title = 'Recent posts in jellyho.com'
    link = '/postfeeds/'
    description = 'Updates on additions and changes of posts'

    def items(self):
        return Post.objects.all().order_by('-created_at')[:10]

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

    def item_description(self, item):
        return item.content

    def item_link(self, item):
        return item.get_absolute_url()

저는 최근 10개의 포스트만 RSS피드에 나타내고 싶어서 created_at을 최신순으로 정렬하고 10개만 가져왔습니다.

마지막으로 urls.py에 해당 링크를 등록해주기만 하면 됩니다.

urls.py

...
from .feed import RecentPostsFeed
...

urlpatterns = [

    ...

    path('postfeed/', RecentPostsFeed(), name='feeds'),
 ]

이렇게 해주고 해당 링크( /postfeed/)로 접속하면...

이렇게 RSS피드가 xml파일 형식으로 정상적으로 출력되는 것을 볼 수 있습니다.

Django RSS xml



Search