def news_detail(request, pk=None): """ Детали поста """ company = None if request.environ['HTTP_HOST']: company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0] post_qs = Post.objects.for_user(request.user, company=company) try: instance_qs = post_qs.filter(pk=pk) instance_qs = Post.update_qs(instance_qs) if len(instance_qs) != 1: raise Http404 instance = instance_qs[0] except Charter.DoesNotExist: raise Http404 instance.text = find_img(instance.text) tags_ids = set(TagPost.objects.filter(post_id=instance.pk).values_list('tag_id', flat=True)) tags_qs = Tag.objects.filter(id__in=tags_ids) recent_post_idx = get_recent_for_tags(instance, request.user) recent_post_qs = Post.objects.filter(id__in=recent_post_idx[0:16]) if recent_post_qs.count() == 0: recent_post_qs = Post.objects.all()[0:16] return render(request, "newsapp/news_detail.html", { 'instance': instance, 'tags_qs': tags_qs, 'active': instance.charter.slug, 'recent_post_qs': recent_post_qs, 'seo': get_settings(company.id), })
def charter_view(request): """ Галерея категорий """ message = None filter_dct = dict() charter_qs = Charter.objects.for_user(request.user).filter(**filter_dct) query = request.GET.get('query') if query: query = query.strip() charter_qs = charter_qs.filter( Q(title__icontains=query) | Q(lead__icontains=query) ) message = f'Все категории по поиску "{query}"' user = request.user charter_dct = dict(Post.objects.for_user(user).order_by().values_list('charter_id').annotate(count=Count('id'))) for charter in charter_qs: charter.count = charter_dct.get(charter.id, None) return render(request, "postapp/charter_view.html", { 'charter_qs': charter_qs, 'active': 'charter', 'message': message, 'seo': get_settings(request.user.company_id), })
def get_footer(context): """ Выводит виджет футера """ seo = get_settings() return { 'SEO': seo, 'inc_counter_name': f'inc/counter.html' if settings.DEBUG else f'inc/counter_{ seo["folder"] }.html' }
def calendar(request): year = request.GET.get('year') if not year: year = timezone.now().year year = int(year) company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0] year_lst = set() post_qs = Post.objects.for_user(user=request.user, company=company).order_by('date_post') for post in range(post_qs.first().date_post.year, post_qs.last().date_post.year + 1): year_lst.add(post) year_lst = list(year_lst) sorted(year_lst) post_qs = Post.objects.for_user(user=request.user, company=company).filter(date_post__startswith=year).order_by('date_post') post_dct = dict() for m in range(1, 13): first_day = datetime.date(year, m, 1) length_mons = (first_day - datetime.timedelta(days=1)) post_dct.setdefault(length_mons.month, {}).setdefault('length', length_mons.day) post_dct.setdefault(m, {}).setdefault('name', first_day.strftime("%B")) post_dct.setdefault(m, {}).setdefault('weekday', first_day.isoweekday()) post_dct.setdefault(m, {}).setdefault('date', []) for m in range(1, 13): count = 0 show = '' cl = list() ls = list() for d in range(1, 43): if len(ls) == 7: cl.append(ls) ls = list() if d >= post_dct[m]['weekday']: count += 1 show = count if count > post_dct[m]['length']: show = '' ls.append(show) cl.append(ls) post_dct.setdefault(m, {}).setdefault('calendar', cl) for post in post_qs: post_dct[post.date_post.month]['date'].append(post.date_post.day) seo = get_settings(request.user.company_id) return render(request, "newsapp/calendar.html", { 'post_dct': dict(sorted(post_dct.items(), key=lambda item: item[0])), 'year': year, 'year_lst': year_lst, 'seo': seo })
def photo_view(request): """ Фотогалерея :param request: :return: """ message = None filter_dct = dict() slug_tag = request.GET.get('tag') if slug_tag: filter_dct.update({'tags__slug': slug_tag}) tag_obj = get_object_or_404(Tag, slug=slug_tag) message = f'Все фотографии по тегу "{tag_obj}"' company = Company.objects.filter( domain__contains=request.environ['HTTP_HOST'])[0] photo_qs = Photo.objects.for_user( request.user, company=company).filter(**filter_dct).order_by('deleted', '-changed') query = request.GET.get('query') if query: query = query.strip() photo_qs = photo_qs.filter( Q(title__icontains=query) | Q(description__icontains=query)) message = f'Все фотографии по поиску "{query}"' seo = get_settings() page = int(request.GET.get('page')) if request.GET.get('page') else 1 pagination_counter = 16 if page: photo_qs = photo_qs[(page - 1) * pagination_counter:page * pagination_counter] else: photo_qs = photo_qs[0:pagination_counter] return render( request, "photoapp/photo_view.html", { 'photo_qs': photo_qs, 'active': 'photo', 'message': message, 'seo': seo, 'pagination': { 'current': page, 'counter': pagination_counter, 'first': 1, 'rw': page - 1, 'ff': page + 1, 'last': pagination_counter, 'counter_lst': [x for x in range(page - 3, page + 4)], } })
def get_main_menu(context, request): """ Выводит виджет меню """ get_keys = list(context.request.GET.keys()) active = context.dicts[3].get('active', None) if len(get_keys) == 1: active = context.request.GET.get(get_keys[0], None) company = Company.objects.filter( domain__contains=request.environ['HTTP_HOST'])[0] seo = get_settings(company.id) return { 'user': context.request.user, 'active': active, 'main_menu': seo.get('main_menu', None), 'site_name': seo.get('site_name', None), }
def user_view(request): message = None user_qs = User.objects.for_user(request.user) query = request.GET.get('query') if query: query = query.strip() user_qs = user_qs.filter( Q(username__icontains=query) | Q(phone__icontains=query) ) message = f'Все люди по поиску "{query}"' return render(request, "postapp/user_view.html", { 'user_qs': user_qs, 'active': 'user', 'message': message, 'seo': get_settings(request.user.company_id), })
def company_view(request): message = None company_qs = Company.objects.for_user(request.user) query = request.GET.get('query') if query: query = query.strip() company_qs = company_qs.filter( Q(title__icontains=query) | Q(slug__icontains=query) ) message = f'Все компании по поиску "{query}"' return render(request, "postapp/company_view.html", { 'company_qs': company_qs, 'active': 'company', 'message': message, 'seo': get_settings(request.user.company_id), })
def post_edit(request, pk=None): """ Редактирование поста """ instance = None photo_list = [('', '---')] if pk: instance = get_object_or_404(Post, pk=pk) photo_list.append((instance.photo.id, instance.photo.title), ) photo_qs = Photo.objects.for_user(request.user).order_by('-changed')[:10] for photo in photo_qs: photo_list.append((photo.id, photo.title), ) charter_list = list() charter_qs = Charter.objects.for_user(request.user).order_by('-order') for charter in charter_qs: charter_list.append((charter.id, charter.title), ) company = request.user.company init_dct = { 'company_list': [(company.id, company.title)], 'photo_list': photo_list, 'charter_list': charter_list, } form = PostForm(data=request.POST or None, files=request.FILES or None, instance=instance, init_dct=init_dct) if request.method == 'POST' and form.is_valid(): cd = form.cleaned_data post = form.save(commit=False) post.save() # Нельзя добавить теги к несуществующему объекту. post.save_tags() return redirect(post_edit, post.pk) tag_slugs = set(TagPost.objects.filter(post=instance).values_list('tag__slug', flat=True)) tags_qs = Tag.objects.filter(slug__in=tag_slugs) return render(request, "postapp/post_edit.html", { 'form': form, 'instance': instance, 'tags_qs': tags_qs, 'active': 'post', 'seo': get_settings(request.user.company_id), })
class PostFeed(Feed): seo = get_settings() title = seo['title'] description = seo['description'] link = '/' def items(self): return Post.objects.filter( deleted__isnull=True, date_post__lte=timezone.now()).order_by('-date_post')[0:25] def item_title(self, obj): return obj.title def item_description(self, obj): return obj.lead def item_link(self, obj): return "/detail/%d" % obj.pk
def company_edit(request, pk=None): """ Добавить или отредактировать тег """ instance = None if pk: instance = get_object_or_404(Company, pk=pk) form = CompanyForm(data=request.POST or None, files=request.FILES or None, instance=instance) if request.method == 'POST': if form.is_valid(): form.save() return redirect(company_view) return render(request, "postapp/company_edit.html", { 'form': form, 'instance': instance, 'active': 'company', 'seo': get_settings(request.user.company_id), })
def get_context_data(self, **kwargs): company = Company.objects.filter( domain__contains=self.request.environ['HTTP_HOST'])[0] seo = get_settings(company.id) ctx = super(YandexDzenRss, self).get_context_data(**kwargs) post_qs = Post.objects.for_user( self.request.user, company=company).filter( deleted__isnull=True, date_post__lte=timezone.now()).order_by('-date_post')[0:25] for post in post_qs: post.title = delete_tags(post.title) post.lead = '<![CDATA[{}]]>'.format(delete_tags(post.lead)) post.text = '<![CDATA[{}]]>'.format(delete_tags(post.text)) ctx['object_list'] = post_qs ctx['static'] = settings.STATIC_URL ctx['media'] = settings.MEDIA_URL ctx['host'] = seo['domain'] ctx['sitename'] = seo['title'] ctx['description'] = seo['description'] return ctx
def get_context_data(self, **kwargs): company = Company.objects.filter( domain__contains=self.request.environ['HTTP_HOST'])[0] seo = get_settings(company.id) ctx = super(YandexTurboRss, self).get_context_data(**kwargs) slug_charter = ctx['view'].request.GET.get('charter') slug_tag = ctx['view'].request.GET.get('tag') filter_dct = { # 'deleted__isnull': True, 'date_post__lte': timezone.now(), } if slug_tag: filter_dct.update({'tags__slug': slug_tag}) get_object_or_404(Tag, slug=slug_tag) if slug_charter: filter_dct.update({'charter__slug': slug_charter}) get_object_or_404(Charter, slug=slug_charter) post_qs = Post.objects.for_user( self.request.user, company=company).filter(**filter_dct).order_by('-date_post')[0:50] for post in post_qs: post.turbo_new = post.turbo and not bool(post.deleted) post.title = process_text(post.title) post.lead = process_text(post.lead) post.text = process_text(post.text) post.url = post.get_absolute_url() ctx['object_list'] = post_qs ctx['static'] = settings.STATIC_URL ctx['media'] = settings.MEDIA_URL ctx['host'] = seo['domain'] ctx['sitename'] = seo['title'] ctx['description'] = seo['description'] return ctx
def charter_edit(request, pk=None): instance = None if pk: instance = get_object_or_404(Charter, pk=pk) company = request.user.company init_dct = { 'company_list': [(company.id, company.title)], } form = CharterForm(data=request.POST or None, files=request.FILES or None, instance=instance, init_dct=init_dct) if request.method == 'POST' and form.is_valid(): cd = form.cleaned_data charter = form.save(commit=False) charter.slug = cyr_lat(cd['title']) charter.save() update_charter(request.user) return redirect(charter_view) return render(request, "postapp/charter_edit.html", { 'form': form, 'instance': instance, 'active': 'charter', 'seo': get_settings(request.user.company_id), })
def news_view(request): """ Галерея новостей """ message = None filter_dct = dict() slug_tag = request.GET.get('tag') company = Company.objects.filter(domain__contains=request.environ['HTTP_HOST'])[0] post_qs = Post.objects.for_user(request.user, company=company).order_by('-date_post') if slug_tag: tag_obj = get_object_or_404(Tag, slug=slug_tag) post_ids = TagPost.objects.filter(tag=tag_obj).values_list('post_id', flat=True) filter_dct.update( {'id__in': post_ids} ) message = f'Публикации по тегу "{tag_obj}"' slug = request.GET.get('charter') if slug: charter = get_object_or_404(Charter, slug=slug) filter_dct.update( {'charter': charter} ) message = f'Публикации в категории "{charter.title}"' date = request.GET.get('date') if date: filter_dct.update( {'date_post__startswith': date} ) message = f'Публикации за дату "{date}"' query = request.GET.get('query') if query: query = query.strip() post_qs = post_qs.filter( Q(title__icontains=query) | Q(text__icontains=query) | Q(lead__icontains=query) ) message = f'Публикации по поиску "{query}"' post_qs = post_qs.filter(**filter_dct) seo = get_settings() seo_title_lst = [seo["title"]] seo['seo_title'] = seo["title"] if message: seo_title_lst.append(message) page = int(request.GET.get('page')) if request.GET.get('page') else 1 pagination_counter = 18 if page > 1: post_qs = post_qs[(page-1)*pagination_counter:page*pagination_counter] keywords = Post.get_tags(post_qs, seo["keywords"]) description_set = set(post_qs.values_list('title', flat=True)) description_set.update({seo["description"]}) description = list(description_set) date_lst = post_qs.values_list('date_post', flat=True) if date_lst: seo_title_lst.append( f"От {min(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')} до {max(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')}" ) else: post_qs = post_qs[0:pagination_counter] keywords = Post.get_tags(post_qs, seo["keywords"]) description_set = set(post_qs.values_list('title', flat=True)) description_set.update({seo["description"]}) description = list(description_set) seo['seo_title'] = ' | '.join(seo_title_lst) seo['seo_description'] = ', '.join(description) seo['seo_keywords'] = ', '.join(keywords) post_qs = Post.update_qs(post_qs) main_qs = post_qs[0:6] page_qs = post_qs[6:] post_idx = [pp.id for pp in post_qs] recent_qs = Post.objects.for_user(request.user, company=company).exclude(id__in=post_idx).order_by('-date_post')[0:12] return render(request, "newsapp/news_view.html", { 'main_qs': main_qs, 'recent_qs': recent_qs, 'page_qs': page_qs, 'message': message, 'seo': seo, 'pagination': { 'current': page, 'counter': pagination_counter, 'first': 1, 'rw': page-1, 'ff': page+1, 'last': pagination_counter, 'counter_lst': [x for x in range(page - 3, page + 4)], }, })
def news_short_list(request): recent_qs = Post.objects.for_user(request.user).order_by('id') return render(request, "newsapp/news_short_list.html", { 'recent_qs': recent_qs, 'seo': get_settings(request.user.company_id), })
def robots(request): robots = 'robots.txt' if request.environ['HTTP_HOST'] not in get_settings()['domain']: robots = 'disable.txt' return render(request, robots, content_type="text/plain")
def post_view(request): """ Галерея постов """ message = None filter_dct = dict() slug_tag = request.GET.get('tag') if slug_tag: tag_obj = get_object_or_404(Tag, slug=slug_tag) post_ids = TagPost.objects.filter(tag=tag_obj).values_list('post_id', flat=True) filter_dct.update( {'id__in': post_ids} ) message = f'Все посты по тегу "{tag_obj}"' slug = request.GET.get('charter') if slug: charter = Charter.objects.get(slug=slug) filter_dct.update( {'charter': charter} ) message = f'Все посты в категории "{charter.title}"' date = request.GET.get('date') if date: filter_dct.update( {'date_post__startswith': date} ) message = f'Все материалы за дату "{date}"' post_qs = Post.objects.for_user(request.user).filter(**filter_dct) query = request.GET.get('query') if query: query = query.strip() post_qs = post_qs.filter( Q(title__icontains=query) | Q(text__icontains=query) | Q(lead__icontains=query) ) message = f'Все посты по поиску "{query}"' seo = get_settings(request.user.company_id) seo_title_lst = [seo["title"]] seo['seo_title'] = seo["title"] if message: seo_title_lst.append(message) page = int(request.GET.get('page')) if request.GET.get('page') else 1 pagination_counter = 10 if page > 1: post_qs = post_qs[(page-1)*pagination_counter:page*pagination_counter] keywords = Post.get_tags(post_qs, seo["keywords"]) description_set = set(post_qs.values_list('title', flat=True)) description_set.update({seo["description"]}) description = list(description_set) date_lst = post_qs.values_list('date_post', flat=True) if date_lst: seo_title_lst.append( f"От {min(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')} до {max(date_lst).strftime(f'%Y-%m-%d %H:%M:%S')}" ) else: post_qs = post_qs[0:pagination_counter] keywords = Post.get_tags(post_qs, seo["keywords"]) description_set = set(post_qs.values_list('title', flat=True)) description_set.update({seo["description"]}) description = list(description_set) seo['seo_title'] = ' | '.join(seo_title_lst) seo['seo_description'] = ', '.join(description) seo['seo_keywords'] = ', '.join(keywords) post_qs = Post.update_qs(post_qs) return render(request, "postapp/post_view.html", { 'post_qs': post_qs, 'active': 'post', 'message': message, 'seo': seo, 'pagination': { 'current': page, 'counter': pagination_counter, 'first': 1, 'rw': page-1, 'ff': page+1, 'last': pagination_counter, 'counter_lst': [x for x in range(page - 3, page + 4)], } })