def draft(request, pk, language): translation.activate(language or 'ru') obj = get_object_or_404(models.Article, pk=pk) return render(request, 'marcus/article.html', { 'article': models.Translation(obj, language), 'categories': (models.Translation(c, language) for c in obj.categories.all()), 'language': language, })
class Tag(ArticleFeed, ContentFeed): def get_object(self, request, slug, language): translation.activate(language or 'ru') tag = get_object_or_404(models.Tag, slug=slug) return tag, language def title(self, (tag, language)): tag = models.Translation(tag, language) return u'%s » %s' % (settings.MARCUS_TITLE, tag.title())
class Category(ArticleFeed, ContentFeed): def get_object(self, request, slug, language): translation.activate(language or 'ru') category = get_object_or_404(models.Category, slug=slug) return category, language def title(self, (category, language)): category = models.Translation(category, language) return u'%s » %s' % (settings.MARCUS_TITLE, category.title())
def article(request, year, month, day, slug, language): obj = get_object_or_404( models.Article, published__year=year, published__month=month, published__day=day, slug=slug ) guest_name = request.session.get('guest_name', '') guest_email = request.session.get('guest_email', '') translation.activate(language or obj.only_language() or 'ru') if request.method == 'POST': form = forms.CommentForm(request.user, get_ip(request), obj, language, request.POST) if form.is_valid(): request.session['guest_name'] = form.cleaned_data.get('name', '') request.session['guest_email'] = form.cleaned_data.get('xemail', '') form.cleaned_data['text'] = form.cleaned_data['text'].replace('script', u'sсript') comment = form.save() return _process_new_comment(request, comment, language, True) else: form = forms.CommentForm(article=obj, language=language) comments = models.Comment.common.language(language)\ .select_related('author', 'author__scipio_profile', 'article')\ .filter(article=obj, type="comment")\ .filter(Q(guest_name=guest_name) | ~Q(approved=None))\ .order_by('created', 'approved') unapproved = False try: unapproved_pk = request.session.get('unapproved') if unapproved_pk: unapproved = models.Comment.objects.get(pk=unapproved_pk, approved=None) except models.Comment.DoesNotExist: if 'unapproved' in request.session: del request.session['unapproved'] retweet_url = u'http://twitter.com/home/?status={title}%20{url}%20{suffix}'.format( title=obj.title(), url=utils.absolute_url(utils.iurl(reverse('marcus-article-short', args=[obj.published.year, obj.slug, ]), language)), suffix=settings.MARCUS_RETWEET_SUFFIX.replace('@', '%40') ) keywords = [tag.title(language) for tag in obj.tags.all()] +\ [category.title(language) for category in obj.categories.all()] return render(request, 'marcus/article.html', { 'article': models.Translation(obj, language), 'comments': comments, # 'noteworthy_count': comments.filter(noteworthy=True).count(), 'form': not obj.comments_hidden and form, 'unapproved': unapproved, 'language': language, 'guest_name': guest_name, 'guest_email': guest_email, 'retweet_url': retweet_url, 'meta_keywords': ", ".join(keywords), 'meta_description': (obj.intro(language) or "").replace('"', "'"), })
def category(request, slug, language): translation.activate(language or 'ru') category = get_object_or_404(models.Category, slug=slug) return object_list( request, models.Article.public.language(language).filter(categories=category), 'marcus/category.html', { 'category': models.Translation(category, language), 'language': language, }, )
def _process_new_comment(request, comment, language, check_login): spam_status = antispam.conveyor.validate(request, comment=comment) if spam_status == 'spam': comment.delete() return render(request, 'marcus/spam.html', { 'text': comment.text, 'admins': [e for n, e in settings.ADMINS], }) if check_login and not request.user.is_authenticated(): form = AuthForm(request.session, {'openid_identifier': request.POST['name']}) if form.is_valid(): comment = models.Translation(comment, language) url = form.auth_redirect(request, target=comment.get_absolute_url(), data={'acquire': str(comment.pk)}) return redirect(url) comment.spam_status = spam_status if spam_status == 'clean': comment.approved = datetime.now() else: request.session['unapproved'] = comment.pk comment.save() return redirect(models.Translation(comment, language))
def tag(request, slug, language): translation.activate(language or 'ru') tag = get_object_or_404(models.Tag, slug=slug) return object_list( request, models.Article.public.language(language).filter(tags=tag), 'marcus/tag.html', { 'tag': models.Translation(tag, language), 'language': language, }, )
class ArticleFeed(object): title_template = 'marcus/feeds/article_title.html' description_template = 'marcus/feeds/article_summary.html' content_template = 'marcus/feeds/article_content.html' author = User.objects.get(pk=settings.MARCUS_AUTHOR_ID) title = settings.MARCUS_TITLE subtitle = settings.MARCUS_SUBTITLE def author_name(self): return self.author.scipio_profile def items(self, (obj, language)): qs = self.get_query_set(obj, language)[:settings.MARCUS_ITEMS_IN_FEED] return [models.Translation(a, language) for a in qs]
class ArticleComment(CommentFeed, ContentFeed): def get_object(self, request, year, month, day, slug, language): translation.activate(language or 'ru') return get_object_or_404( models.Article, published__year=year, published__month=month, published__day=day, slug=slug, ), language def title(self, (article, language)): article = models.Translation(article, language) return u'%s » %s' % (article.title(), _(u'comments'))
class CommentFeed(object): title_template = 'marcus/feeds/comment_title.html' description_template = 'marcus/feeds/comment_summary.html' content_template = 'marcus/feeds/comment_content.html' subtitle = settings.MARCUS_SUBTITLE def title(self): return u'%s » %s' % (settings.MARCUS_TITLE, _(u'comments')) def items(self, (obj, language)): qs = self.get_query_set(obj, language).select_related( 'author', 'author__scipio_profile', 'article', 'article__author')[:settings.MARCUS_ITEMS_IN_FEED] return [models.Translation(c, language) for c in qs]
def get_object(self, request, year, month, day, slug, language): translation.activate(language or 'ru') return get_object_or_404( models.Article, published__year=year, published__month=month, published__day=day, slug=slug, ), language def title(self, (article, language)): article = models.Translation(article, language) return u'%s » %s' % (article.title(), _(u'comments')) def link(self, (article, language)): article = models.Translation(article, language) return article.get_absolute_url() def get_query_set(self, article, language): return models.Comment.public.language(language).filter( article=article).order_by('-created') class ArticleCommentShort(ArticleComment): def get_object(self, request, year, slug, language): translation.activate(language or 'ru') return get_object_or_404( models.Article, published__year=year, slug=slug, ), language
def _translate(v): if hasattr(v, '__iter__'): return [_translate(i) for i in v] else: return models.Translation(v, language)