Add support for view_url_name. Smarter toolbar menu. Sync with latest parler updates.
This commit is contained in:
parent
b6142d86df
commit
2515b2a646
3 changed files with 34 additions and 13 deletions
|
@ -5,13 +5,23 @@ from django.core.urlresolvers import reverse
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
|
||||
from .models import BLOG_CURRENT_POST_IDENTIFIER
|
||||
|
||||
|
||||
@toolbar_pool.register
|
||||
class BlogToolbar(CMSToolbar):
|
||||
|
||||
def populate(self):
|
||||
if not (self.is_current_app and self.request.user.has_perm('djangocms_blog.add_post')):
|
||||
return
|
||||
admin_menu = self.toolbar.get_or_create_menu("djangocms_blog", _('Blog'))
|
||||
url = reverse('admin:djangocms_blog_post_changelist')
|
||||
admin_menu.add_modal_item(_('Post list'), url=url)
|
||||
url = reverse('admin:djangocms_blog_post_add')
|
||||
admin_menu.add_modal_item(_('Add post'), url=url)
|
||||
|
||||
current_post = getattr(self.request, BLOG_CURRENT_POST_IDENTIFIER, None)
|
||||
if current_post and self.request.user.has_perm('djangocms_blog.change_post'):
|
||||
admin_menu.add_modal_item(_('Edit Post'),reverse(
|
||||
'admin:djangocms_blog_post_change', args=(current_post.pk,)),
|
||||
active=True)
|
|
@ -17,6 +17,7 @@ from taggit_autosuggest.managers import TaggableManager
|
|||
from . import settings
|
||||
from .managers import GenericDateTaggedManager
|
||||
|
||||
BLOG_CURRENT_POST_IDENTIFIER = 'djangocms_post_current'
|
||||
|
||||
class BlogCategory(TranslatableModel):
|
||||
"""
|
||||
|
@ -101,6 +102,7 @@ class Post(TranslatableModel):
|
|||
verbose_name = _('blog article')
|
||||
verbose_name_plural = _('blog articles')
|
||||
ordering = ("-date_published", "-date_created")
|
||||
get_latest_by = 'date_published'
|
||||
|
||||
def __unicode__(self):
|
||||
return self.safe_translation_getter('title')
|
||||
|
|
|
@ -1,23 +1,23 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import datetime
|
||||
from cms.utils import get_language_from_request
|
||||
from django.utils.translation import get_language
|
||||
from django.contrib.auth.models import User
|
||||
from django.core.urlresolvers import resolve
|
||||
from django.db.models import Count
|
||||
from django.http import Http404
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.generic import ListView, DetailView
|
||||
from parler.utils import get_active_language_choices
|
||||
|
||||
from .models import Post, BlogCategory
|
||||
from parler.views import ViewUrlMixin
|
||||
|
||||
from .models import Post, BlogCategory, BLOG_CURRENT_POST_IDENTIFIER
|
||||
from .settings import BLOG_PAGINATION, BLOG_POSTS_LIST_TRUNCWORDS_COUNT
|
||||
|
||||
|
||||
class BaseBlogView(object):
|
||||
class BaseBlogView(ViewUrlMixin):
|
||||
|
||||
def get_queryset(self):
|
||||
language = get_language_from_request(self.request)
|
||||
manager = self.model._default_manager.translated(language)
|
||||
language = get_language()
|
||||
manager = self.model._default_manager.language(language)
|
||||
if not self.request.user.is_staff:
|
||||
manager = manager.filter(publish=True)
|
||||
return manager
|
||||
|
@ -32,6 +32,7 @@ class PostListView(BaseBlogView, ListView):
|
|||
context_object_name = 'post_list'
|
||||
template_name = "djangocms_blog/post_list.html"
|
||||
paginate_by = BLOG_PAGINATION
|
||||
view_url_name = 'djangocms_blog:posts-latest'
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(PostListView, self).get_context_data(**kwargs)
|
||||
|
@ -43,18 +44,22 @@ class PostDetailView(BaseBlogView, DetailView):
|
|||
model = Post
|
||||
context_object_name = 'post'
|
||||
template_name = "djangocms_blog/post_detail.html"
|
||||
slug_field = 'translations__slug'
|
||||
slug_field = 'slug'
|
||||
view_url_name = 'djangocms_blog:post-detail'
|
||||
|
||||
def get_object(self, queryset=None):
|
||||
try:
|
||||
qs = self.model._default_manager.get(**{
|
||||
'translations__language_code': get_language_from_request(self.request),
|
||||
qs = self.model._default_manager.active_translations(**{
|
||||
self.slug_field: self.kwargs.get(self.slug_url_kwarg, None)
|
||||
})
|
||||
}).latest()
|
||||
except Post.DoesNotExist:
|
||||
raise Http404()
|
||||
return qs
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(PostDetailView, self).get_context_data(**kwargs)
|
||||
setattr(self.request, BLOG_CURRENT_POST_IDENTIFIER, self.get_object())
|
||||
return context
|
||||
|
||||
class PostArchiveView(BaseBlogView, ListView):
|
||||
model = Post
|
||||
|
@ -64,6 +69,7 @@ class PostArchiveView(BaseBlogView, ListView):
|
|||
allow_empty = True
|
||||
allow_future = True
|
||||
paginate_by = BLOG_PAGINATION
|
||||
view_url_name = 'djangocms_blog:posts-archive'
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(PostArchiveView, self).get_queryset()
|
||||
|
@ -86,6 +92,7 @@ class TaggedListView(BaseBlogView, ListView):
|
|||
context_object_name = 'post_list'
|
||||
template_name = "djangocms_blog/post_list.html"
|
||||
paginate_by = BLOG_PAGINATION
|
||||
view_url_name = 'djangocms_blog:posts-tagged'
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(TaggedListView, self).get_queryset()
|
||||
|
@ -102,6 +109,7 @@ class AuthorEntriesView(BaseBlogView, ListView):
|
|||
context_object_name = 'post_list'
|
||||
template_name = "djangocms_blog/post_list.html"
|
||||
paginate_by = BLOG_PAGINATION
|
||||
view_url_name = 'djangocms_blog:posts-authors'
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(AuthorEntriesView, self).get_queryset()
|
||||
|
@ -120,11 +128,12 @@ class CategoryEntriesView(BaseBlogView, ListView):
|
|||
template_name = "djangocms_blog/post_list.html"
|
||||
_category = None
|
||||
paginate_by = BLOG_PAGINATION
|
||||
view_url_name = 'djangocms_blog:posts-category'
|
||||
|
||||
@property
|
||||
def category(self):
|
||||
if not self._category:
|
||||
language = get_language_from_request(self.request)
|
||||
language = get_language()
|
||||
self._category = BlogCategory._default_manager.language(language).get(
|
||||
translations__language_code=language,
|
||||
translations__slug=self.kwargs['category'])
|
||||
|
|
Loading…
Reference in a new issue