You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
73 lines
2.3 KiB
73 lines
2.3 KiB
from django.contrib import messages
|
|
from django.contrib.sitemaps import Sitemap
|
|
from django.core.mail import mail_managers
|
|
from django.shortcuts import render, get_object_or_404, redirect
|
|
from django.views.generic import ListView, DetailView
|
|
from django.views.generic.edit import FormView, CreateView
|
|
from news.forms import CommentForm
|
|
from news.models import *
|
|
|
|
|
|
class NewsList(ListView):
|
|
model = News
|
|
template_name = 'news/list.jinja'
|
|
queryset = News.objects.filter(is_public=True).order_by('-pk')
|
|
|
|
def get_queryset(self):
|
|
tag = self.request.GET.get('tag', None)
|
|
retval = self.queryset
|
|
if tag:
|
|
retval = self.queryset.filter(
|
|
tags_list__slug__iexact=tag, is_public=True).order_by('-pk')
|
|
return retval
|
|
|
|
def get_context_data(self, **kwargs):
|
|
retval = super(NewsList, self).get_context_data()
|
|
tag = self.request.GET.get('tag', None)
|
|
if tag:
|
|
try:
|
|
retval['tag'] = NewsTag.objects.get(slug=tag)
|
|
except:
|
|
pass
|
|
return retval
|
|
|
|
|
|
def news_detail(request, slug):
|
|
object = get_object_or_404(News, slug__iexact=slug, is_public=True)
|
|
form = CommentForm(request.POST or None)
|
|
if form.is_valid():
|
|
comment = form.save(commit=False)
|
|
comment.news = object
|
|
comment.save()
|
|
mail_managers('Новый комментарий к новости', '''
|
|
Имя: {}
|
|
Email: {}
|
|
Комментарий: {}
|
|
Новость: {}
|
|
Ссылка на новость: http://batiskaf-kz.kz{}
|
|
'''.format(
|
|
form.cleaned_data['name'],
|
|
form.cleaned_data['email'],
|
|
form.cleaned_data['text'],
|
|
object.title,
|
|
object.get_absolute_url(),
|
|
))
|
|
messages.success(request, 'Ваш комментарий успешно опубликован!')
|
|
return redirect(object.get_absolute_url() + '#comment{}'.format(comment.pk))
|
|
|
|
c = dict(
|
|
object=object,
|
|
form=form
|
|
)
|
|
return render(request, 'news/detail.jinja', c)
|
|
|
|
|
|
class NewsSitemap(Sitemap):
|
|
changefreq = "never"
|
|
priority = 0.7
|
|
|
|
def items(self):
|
|
return News.objects.filter(is_public=True)
|
|
|
|
def lastmod(self, obj):
|
|
return obj.created
|
|
|