add rss feed for reviews
This commit is contained in:
parent
52b720cb73
commit
204569ade5
5 changed files with 58 additions and 0 deletions
49
users/feeds.py
Normal file
49
users/feeds.py
Normal file
|
@ -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'<p><a href="{item.item.url}">{item.item.title}</a></p>\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
|
|
@ -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
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
{% else %}
|
||||
<title>{{ site_name }} - {{user.display_name}}</title>
|
||||
{% endif %}
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ site_name }} - {{ username }}@{{ site }}的评论" href="{{ request.build_absolute_uri }}feed/reviews/">
|
||||
|
||||
{% include "partial/_common_libs.html" with jquery=1 %}
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
<meta charset="UTF-8">
|
||||
<meta http-equiv="refresh" content="0;URL={{ login_url }}" />
|
||||
<title>{{ site_name }} - {{ username }}@{{ site }}</title>
|
||||
<link rel="alternate" type="application/rss+xml" title="{{ site_name }} - {{ username }}@{{ site }}的评论" href="{{ request.build_absolute_uri }}feed/reviews/">
|
||||
<meta property="og:title" content="{{ site_name }} - {{ username }}@{{ site }}的书影音">
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="{{ request.build_absolute_uri }}">
|
||||
|
|
|
@ -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('<str:id>/movie/<str:status>/', movie_list, name='movie_list'),
|
||||
path('<str:id>/music/<str:status>/', music_list, name='music_list'),
|
||||
path('<str:id>/game/<str:status>/', game_list, name='game_list'),
|
||||
path('<str:id>/feed/reviews/', ReviewFeed(), name='review_feed'),
|
||||
path('report/', report, name='report'),
|
||||
path('manage_report/', manage_report, name='manage_report'),
|
||||
]
|
||||
|
|
Loading…
Add table
Reference in a new issue