##// END OF EJS Templates
Fixed thread RSS
neko259 -
r580:7081c21d default
parent child Browse files
Show More
@@ -1,79 +1,79 b''
1 1 from django.contrib.syndication.views import Feed
2 2 from django.core.urlresolvers import reverse
3 3 from django.shortcuts import get_object_or_404
4 4 from boards.models import Post, Tag
5 5 from neboard import settings
6 6
7 7 __author__ = 'neko259'
8 8
9 9
10 10 # TODO Make tests for all of these
11 11 class AllThreadsFeed(Feed):
12 12
13 13 title = settings.SITE_NAME + ' - All threads'
14 14 link = '/'
15 15 description_template = 'boards/rss/post.html'
16 16
17 17 def items(self):
18 18 return Post.objects.get_threads(order_by='-id')
19 19
20 20 def item_title(self, item):
21 21 return item.get_opening_post().title
22 22
23 23 def item_link(self, item):
24 24 return reverse('thread', args={item.get_opening_post().id})
25 25
26 26 def item_pubdate(self, item):
27 27 return item.get_pub_time()
28 28
29 29
30 30 class TagThreadsFeed(Feed):
31 31
32 32 link = '/'
33 33 description_template = 'boards/rss/post.html'
34 34
35 35 def items(self, obj):
36 36 return Post.objects.get_threads(tag=obj, order_by='-id')
37 37
38 38 def get_object(self, request, tag_name):
39 39 return get_object_or_404(Tag, name=tag_name)
40 40
41 41 def item_title(self, item):
42 42 return item.get_opening_post().title
43 43
44 44 def item_link(self, item):
45 45 return reverse('thread', args={item.get_opening_post().id})
46 46
47 47 def item_pubdate(self, item):
48 48 return item.get_pub_time()
49 49
50 50 def title(self, obj):
51 51 return obj.name
52 52
53 53
54 54 class ThreadPostsFeed(Feed):
55 55
56 56 link = '/'
57 57 description_template = 'boards/rss/post.html'
58 58
59 59 def items(self, obj):
60 return get_object_or_404(Post, id=obj).thread_new.get_replies()
60 return obj.thread_new.get_replies()
61 61
62 62 def get_object(self, request, post_id):
63 return post_id
63 return get_object_or_404(Post, id=post_id)
64 64
65 65 def item_title(self, item):
66 66 return item.title
67 67
68 68 def item_link(self, item):
69 69 if not item.is_opening():
70 70 return reverse('thread', args={item.thread_new.get_opening_post()
71 71 .id}) + "#" + str(item.id)
72 72 else:
73 73 return reverse('thread', args={item.id})
74 74
75 75 def item_pubdate(self, item):
76 76 return item.pub_time
77 77
78 78 def title(self, obj):
79 return get_object_or_404(Post, id=obj).title
79 return obj.title
@@ -1,83 +1,83 b''
1 1 from django.conf.urls import patterns, url, include
2 2 from boards import views
3 3 from boards.rss import AllThreadsFeed, TagThreadsFeed, ThreadPostsFeed
4 4 from boards.views import api, tag_threads, all_threads, archived_threads, \
5 5 login, settings, all_tags
6 6 from boards.views.authors import AuthorsView
7 7 from boards.views.delete_post import DeletePostView
8 8 from boards.views.ban import BanUserView
9 9 from boards.views.static import StaticPageView
10 10 from boards.views.post_admin import PostAdminView
11 11
12 12 js_info_dict = {
13 13 'packages': ('boards',),
14 14 }
15 15
16 16 urlpatterns = patterns('',
17 17
18 18 # /boards/
19 19 url(r'^$', all_threads.AllThreadsView.as_view(), name='index'),
20 20 # /boards/page/
21 21 url(r'^page/(?P<page>\w+)/$', all_threads.AllThreadsView.as_view(),
22 22 name='index'),
23 23
24 24 url(r'^archive/$', archived_threads.ArchiveView.as_view(), name='archive'),
25 25 url(r'^archive/page/(?P<page>\w+)/$',
26 26 archived_threads.ArchiveView.as_view(), name='archive'),
27 27
28 28 # login page
29 29 url(r'^login/$', login.LoginView.as_view(), name='login'),
30 30
31 31 # /boards/tag/tag_name/
32 32 url(r'^tag/(?P<tag_name>\w+)/$', tag_threads.TagView.as_view(),
33 33 name='tag'),
34 34 # /boards/tag/tag_id/page/
35 35 url(r'^tag/(?P<tag_name>\w+)/page/(?P<page>\w+)/$',
36 36 tag_threads.TagView.as_view(), name='tag'),
37 37
38 38 # /boards/thread/
39 39 url(r'^thread/(?P<post_id>\w+)/$', views.thread.ThreadView.as_view(),
40 40 name='thread'),
41 url(r'^thread/(?P<post_id>\w+)/(?P<mode>\w+)/$', views.thread.ThreadView
41 url(r'^thread/(?P<post_id>\w+)/mode/(?P<mode>\w+)/$', views.thread.ThreadView
42 42 .as_view(), name='thread_mode'),
43 43
44 44 # /boards/post_admin/
45 45 url(r'^post_admin/(?P<post_id>\w+)/$', PostAdminView.as_view(),
46 46 name='post_admin'),
47 47
48 48 url(r'^settings/$', settings.SettingsView.as_view(), name='settings'),
49 49 url(r'^tags/$', all_tags.AllTagsView.as_view(), name='tags'),
50 50 url(r'^captcha/', include('captcha.urls')),
51 51 url(r'^authors/$', AuthorsView.as_view(), name='authors'),
52 52 url(r'^delete/(?P<post_id>\w+)/$', DeletePostView.as_view(),
53 53 name='delete'),
54 54 url(r'^ban/(?P<post_id>\w+)/$', BanUserView.as_view(), name='ban'),
55 55
56 56 url(r'^banned/$', views.banned.BannedView.as_view(), name='banned'),
57 57 url(r'^staticpage/(?P<name>\w+)/$', StaticPageView.as_view(),
58 58 name='staticpage'),
59 59
60 60 # RSS feeds
61 61 url(r'^rss/$', AllThreadsFeed()),
62 62 url(r'^page/(?P<page>\w+)/rss/$', AllThreadsFeed()),
63 63 url(r'^tag/(?P<tag_name>\w+)/rss/$', TagThreadsFeed()),
64 64 url(r'^tag/(?P<tag_name>\w+)/page/(?P<page>\w+)/rss/$', TagThreadsFeed()),
65 65 url(r'^thread/(?P<post_id>\w+)/rss/$', ThreadPostsFeed()),
66 66
67 67 # i18n
68 68 url(r'^jsi18n/$', 'boards.views.cached_js_catalog', js_info_dict,
69 69 name='js_info_dict'),
70 70
71 71 # API
72 72 url(r'^api/post/(?P<post_id>\w+)/$', api.get_post, name="get_post"),
73 73 url(r'^api/diff_thread/(?P<thread_id>\w+)/(?P<last_update_time>\w+)/$',
74 74 api.api_get_threaddiff, name="get_thread_diff"),
75 75 url(r'^api/threads/(?P<count>\w+)/$', api.api_get_threads,
76 76 name='get_threads'),
77 77 url(r'^api/tags/$', api.api_get_tags, name='get_tags'),
78 78 url(r'^api/thread/(?P<opening_post_id>\w+)/$', api.api_get_thread_posts,
79 79 name='get_thread'),
80 80 url(r'^api/add_post/(?P<opening_post_id>\w+)/$', api.api_add_post,
81 81 name='add_post'),
82 82
83 83 )
General Comments 0
You need to be logged in to leave comments. Login now