From 204569ade5eb48dc7f5f6c6972335c0a7fda801a Mon Sep 17 00:00:00 2001 From: Te Llamas Date: Tue, 8 Nov 2022 02:32:35 +0000 Subject: [PATCH] add rss feed for reviews --- users/feeds.py | 49 +++++++++++++++++++++++ users/models.py | 5 +++ users/templates/users/home.html | 1 + users/templates/users/home_anonymous.html | 1 + users/urls.py | 2 + 5 files changed, 58 insertions(+) create mode 100644 users/feeds.py diff --git a/users/feeds.py b/users/feeds.py new file mode 100644 index 00000000..db5a5334 --- /dev/null +++ b/users/feeds.py @@ -0,0 +1,49 @@ +from django.contrib.syndication.views import Feed +from django.urls import reverse +from books.models import BookReview +from .models import User +from markdown import markdown +import operator + + +MAX_ITEM_PER_TYPE = 10 + + +class ReviewFeed(Feed): + def get_object(self, request, id): + return User.get(id) + + def title(self, user): + return "%s 的评论" % user.display_name + + def link(self, user): + return user.url + + def description(self, user): + return "%s 的评论合集 - NeoDB" % user.display_name + + def items(self, user): + if user is None: + return None + book_reviews = list(user.user_bookreviews.filter(visibility=0)[:MAX_ITEM_PER_TYPE]) + movie_reviews = list(user.user_moviereviews.filter(visibility=0)[:MAX_ITEM_PER_TYPE]) + album_reviews = list(user.user_albumreviews.filter(visibility=0)[:MAX_ITEM_PER_TYPE]) + game_reviews = list(user.user_gamereviews.filter(visibility=0)[:MAX_ITEM_PER_TYPE]) + all_reviews = sorted( + book_reviews + movie_reviews + album_reviews + game_reviews, + key=operator.attrgetter('created_time'), + reverse=True + ) + return all_reviews + + def item_title(self, item): + return f"{item.title} - 评论《{item.item.title}》" + + def item_description(self, item): + target_html = f'

{item.item.title}

\n' + html = markdown(item.content) + return target_html + html + + # item_link is only needed if NewsItem has no get_absolute_url method. + def item_link(self, item): + return item.url \ No newline at end of file diff --git a/users/models.py b/users/models.py index 2cc92e83..1b5bfb3c 100644 --- a/users/models.py +++ b/users/models.py @@ -8,6 +8,7 @@ from django.utils.translation import gettext_lazy as _ from common.utils import GenerateDateUUIDMediaFilePath from django.conf import settings from mastodon.api import * +from django.shortcuts import reverse def report_image_path(instance, filename): @@ -59,6 +60,10 @@ class User(AbstractUser): def display_name(self): return self.mastodon_account['display_name'] if self.mastodon_account and 'display_name' in self.mastodon_account and self.mastodon_account['display_name'] else self.mastodon_username + @property + def url(self): + return reverse("users:home", args=[self.mastodon_username]) + def __str__(self): return self.mastodon_username diff --git a/users/templates/users/home.html b/users/templates/users/home.html index ddad07d3..121502ee 100644 --- a/users/templates/users/home.html +++ b/users/templates/users/home.html @@ -16,6 +16,7 @@ {% else %} {{ site_name }} - {{user.display_name}} {% endif %} + {% include "partial/_common_libs.html" with jquery=1 %} diff --git a/users/templates/users/home_anonymous.html b/users/templates/users/home_anonymous.html index 946ac96e..eed786c8 100644 --- a/users/templates/users/home_anonymous.html +++ b/users/templates/users/home_anonymous.html @@ -6,6 +6,7 @@ {{ site_name }} - {{ username }}@{{ site }} + diff --git a/users/urls.py b/users/urls.py index 3b0d2b34..6cbbfe40 100644 --- a/users/urls.py +++ b/users/urls.py @@ -1,5 +1,6 @@ from django.urls import path from .views import * +from .feeds import ReviewFeed app_name = 'users' urlpatterns = [ @@ -37,6 +38,7 @@ urlpatterns = [ path('/movie//', movie_list, name='movie_list'), path('/music//', music_list, name='music_list'), path('/game//', game_list, name='game_list'), + path('/feed/reviews/', ReviewFeed(), name='review_feed'), path('report/', report, name='report'), path('manage_report/', manage_report, name='manage_report'), ]