Changeset 2527
- Timestamp:
- 02/05/10 08:15:48 (6 weeks ago)
- Location:
- branches/0.9/pylucid_project/pylucid_plugins/blog
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
branches/0.9/pylucid_project/pylucid_plugins/blog/models.py
r2469 r2527 18 18 19 19 from django.db import models 20 from django.conf import settings 20 21 from django.core import urlresolvers 21 22 from django.db.models import signals … … 23 24 from django.template.defaultfilters import slugify 24 25 from django.utils.translation import ugettext_lazy as _ 26 from django.core.paginator import Paginator, InvalidPage, EmptyPage 25 27 26 28 # http://code.google.com/p/django-tagging/ 27 29 from tagging.fields import TagField 28 29 from pylucid_project.pylucid_plugins import update_journal30 30 31 31 from pylucid_project.apps.pylucid.shortcuts import failsafe_message … … 35 35 from pylucid_project.apps.pylucid.cache import clean_complete_pagecache 36 36 37 from pylucid_project.pylucid_plugins import update_journal 38 39 from pylucid_project.pylucid_plugins.blog.preference_forms import BlogPrefForm 40 41 # from django-tagging 42 from tagging.models import Tag 43 37 44 38 45 TAG_INPUT_HELP_URL = \ 39 46 "http://google.com/search?q=cache:django-tagging.googlecode.com/files/tagging-0.2-overview.html#tag-input" 47 48 49 class BlogEntryManager(models.Manager): 50 def all_accessible(self, request): 51 """ returns a queryset of all blog entries that the current user can access. """ 52 filters = self.get_filters(request) 53 return self.model.objects.filter(**filters) 54 55 def get_filters(self, request): 56 """ 57 Construct queryset filter kwargs, to limit the BlogEntry queryset for the current user 58 """ 59 current_lang = request.PYLUCID.language_entry 60 61 filters = { 62 "sites__id__exact": settings.SITE_ID, 63 "language": current_lang, 64 } 65 66 if not request.user.has_perm("blog.change_blogentry"): 67 filters["is_public"] = True 68 69 return filters 70 71 def get_tag_cloud(self, request): 72 filters = self.get_filters(request) 73 tag_cloud = Tag.objects.cloud_for_model(self.model, steps=2, filters=filters) 74 return tag_cloud 75 76 def paginate(self, request, queryset): 77 """ Limit the queryset with django Paginator and returns the Paginator instance """ 78 # Get number of entries allowed by the users see on a page. 79 pref_form = BlogPrefForm() 80 preferences = pref_form.get_preferences() 81 if request.user.is_anonymous(): 82 max_count = preferences.get("max_anonym_count", 10) 83 else: 84 max_count = preferences.get("max_user_count", 30) 85 86 # Show max_count entries per page 87 paginator = Paginator(queryset, max_count) 88 89 # Make sure page request is an int. If not, deliver first page. 90 try: 91 page = int(request.GET.get('page', '1')) 92 except ValueError: 93 page = 1 94 95 # If page request (9999) is out of range, deliver last page of results. 96 try: 97 return paginator.page(page) 98 except (EmptyPage, InvalidPage): 99 return paginator.page(paginator.num_pages) 100 40 101 41 102 … … 55 116 lastupdateby -> ForeignKey to user who has edited this entry 56 117 """ 118 objects = BlogEntryManager() 119 57 120 headline = models.CharField(_('Headline'), 58 121 help_text=_("The blog entry headline"), max_length=255 -
branches/0.9/pylucid_project/pylucid_plugins/blog/views.py
r2526 r2527 30 30 from django.views.decorators.csrf import csrf_protect 31 31 from django.contrib.comments.views.comments import post_comment 32 from django.core.paginator import Paginator, InvalidPage, EmptyPage33 32 34 33 from pylucid_project.apps.pylucid.decorators import render_to 35 34 36 35 from pylucid_project.pylucid_plugins.blog.models import BlogEntry 37 from pylucid_project.pylucid_plugins.blog.preference_forms import BlogPrefForm38 36 39 37 # from django-tagging 40 38 from tagging.models import Tag, TaggedItem 41 39 42 43 def _get_filters(request):44 """45 Construct queryset filter.46 Used for blog entry filtering and for Tag.objects.cloud_for_model()47 """48 current_lang = request.PYLUCID.language_entry49 filters = {"language":current_lang}50 51 if not request.user.has_perm("blog.change_blogentry"):52 filters["is_public"] = True53 54 return filters55 56 57 def _filter_blog_entries(request, queryset):58 filters = _get_filters(request)59 queryset = queryset.filter(**filters)60 return queryset61 62 63 def _paginat_queryset(request, queryset):64 # Get number of entries allowed by the users see on a page.65 pref_form = BlogPrefForm()66 preferences = pref_form.get_preferences()67 if request.user.is_anonymous():68 max_count = preferences.get("max_anonym_count", 10)69 else:70 max_count = preferences.get("max_user_count", 30)71 72 # Show max_count entries per page73 paginator = Paginator(queryset, max_count)74 75 # Make sure page request is an int. If not, deliver first page.76 try:77 page = int(request.GET.get('page', '1'))78 except ValueError:79 page = 180 81 # If page request (9999) is out of range, deliver last page of results.82 try:83 return paginator.page(page)84 except (EmptyPage, InvalidPage):85 return paginator.page(paginator.num_pages)86 87 88 def _get_tag_cloud(request):89 filters = _get_filters(request)90 tag_cloud = Tag.objects.cloud_for_model(BlogEntry, steps=2, filters=filters)91 return tag_cloud92 40 93 41 … … 106 54 """ 107 55 # Get all blog entries, that the current user can see 108 queryset = BlogEntry.on_site 109 queryset = _filter_blog_entries(request, queryset) 56 queryset = BlogEntry.objects.all_accessible(request) 110 57 111 entries = _paginat_queryset(request, queryset) 58 # Limit the queryset with django Paginator 59 paginator = BlogEntry.objects.paginate(request, queryset) 60 61 tag_cloud = BlogEntry.objects.get_tag_cloud(request) 112 62 113 63 context = { 114 "entries": entries,115 "tag_cloud": _get_tag_cloud(request),64 "entries": paginator, 65 "tag_cloud": tag_cloud, 116 66 "CSS_PLUGIN_CLASS_NAME": settings.PYLUCID.CSS_PLUGIN_CLASS_NAME, 117 67 } … … 125 75 """ 126 76 tags = tag.strip("/").split("/") 127 queryset = TaggedItem.objects.get_by_model(BlogEntry, tags)128 queryset = _filter_blog_entries(request, queryset)129 77 130 entries = _paginat_queryset(request, queryset) 78 # Get all blog entries, that the current user can see 79 queryset = BlogEntry.objects.all_accessible(request) 80 81 queryset = TaggedItem.objects.get_by_model(queryset, tags) 82 83 # Limit the queryset with django Paginator 84 paginator = BlogEntry.objects.paginate(request, queryset) 131 85 132 86 # Add link to the breadcrumbs ;) 133 87 _add_breadcrumb(request, title=_("All '%s' tagged items" % ",".join(tags)), url=request.path) 134 88 89 tag_cloud = BlogEntry.objects.get_tag_cloud(request) 90 135 91 context = { 136 "entries": entries,137 "tag_cloud": _get_tag_cloud(request),92 "entries": paginator, 93 "tag_cloud": tag_cloud, 138 94 "CSS_PLUGIN_CLASS_NAME": settings.PYLUCID.CSS_PLUGIN_CLASS_NAME, 139 95 } … … 144 100 @render_to("blog/detail_view.html") 145 101 def detail_view(request, id, title): 146 entry = BlogEntry.objects.get(pk=id) 102 """ 103 Display one blog entry with a comment form. 104 """ 105 # Get all blog entries, that the current user can see 106 queryset = BlogEntry.objects.all_accessible(request) 107 108 try: 109 entry = queryset.get(pk=id) 110 except BlogEntry.DoesNotExist: 111 msg = "Blog entry doesn't exist." 112 if settings.DEBUG or request.user.is_staff: 113 msg += " (ID %r wrong.)" % id 114 request.page_msg.error(msg) 115 return summary(request) 147 116 148 117 # Add link to the breadcrumbs ;) … … 154 123 return post_comment(request, next=entry.get_absolute_url()) 155 124 125 tag_cloud = BlogEntry.objects.get_tag_cloud(request) 126 156 127 context = { 157 128 "page_title": entry.headline, # Change the global title with blog headline 158 129 "entry": entry, 159 "tag_cloud": _get_tag_cloud(request),130 "tag_cloud": tag_cloud, 160 131 "CSS_PLUGIN_CLASS_NAME": settings.PYLUCID.CSS_PLUGIN_CLASS_NAME, 161 132 }