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.
48 lines
1.5 KiB
48 lines
1.5 KiB
from django.contrib import messages
|
|
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)
|
|
|
|
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)
|
|
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)
|
|
form = CommentForm(request.POST or None)
|
|
if form.is_valid():
|
|
comment = form.save(commit=False)
|
|
comment.news = object
|
|
comment.save()
|
|
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)
|
|
|
|
|
|
|