prod
This commit is contained in:
@@ -1,5 +1,9 @@
|
||||
from django.shortcuts import render, get_object_or_404, redirect
|
||||
from .models import Service, Project, Client, BlogPost, Review, Order, ServiceRequest, Category, AboutPage, FooterSettings, TeamMember
|
||||
from .models import (
|
||||
Service, Project, Client, BlogPost, Review, Order, ServiceRequest,
|
||||
Category, AboutPage, FooterSettings, TeamMember,
|
||||
NewsArticle, CareerVacancy, PortfolioItem, PrivacyPolicy, TermsOfUse
|
||||
)
|
||||
from django.db.models import Avg
|
||||
from comunication.models import TelegramSettings
|
||||
import qrcode
|
||||
@@ -36,7 +40,28 @@ except Exception as e:
|
||||
|
||||
def home(request):
|
||||
services = Service.objects.all()[:6] # Показываем только первые 6 услуг на главной
|
||||
return render(request, 'web/home_modern.html', {'services': services})
|
||||
|
||||
# Последние посты блога
|
||||
recent_blog_posts = BlogPost.objects.filter(status=BlogPost.PUBLISHED).order_by('-published_date')[:2]
|
||||
|
||||
# Последние новости
|
||||
recent_news = NewsArticle.objects.filter(is_published=True).order_by('-published_date')[:2]
|
||||
|
||||
# Избранные проекты портфолио
|
||||
featured_portfolio = PortfolioItem.objects.filter(featured=True, is_active=True)[:3]
|
||||
|
||||
# Количество активных вакансий
|
||||
active_vacancies_count = CareerVacancy.objects.filter(is_active=True).count()
|
||||
|
||||
context = {
|
||||
'services': services,
|
||||
'recent_blog_posts': recent_blog_posts,
|
||||
'recent_news': recent_news,
|
||||
'featured_portfolio': featured_portfolio,
|
||||
'active_vacancies_count': active_vacancies_count,
|
||||
}
|
||||
|
||||
return render(request, 'web/home_modern.html', context)
|
||||
|
||||
def service_detail(request, pk):
|
||||
service = get_object_or_404(Service, pk=pk)
|
||||
@@ -353,3 +378,79 @@ def check_request_status(request, request_id):
|
||||
except Exception as e:
|
||||
logger.error(f"Ошибка при проверке статуса заявки {request_id}: {str(e)}")
|
||||
return JsonResponse({'error': 'Ошибка сервера'}, status=500)
|
||||
|
||||
|
||||
# ========== Blog Views ==========
|
||||
def blog_list(request):
|
||||
"""Список всех опубликованных постов блога"""
|
||||
posts = BlogPost.objects.filter(status=BlogPost.PUBLISHED).order_by('-published_date')
|
||||
return render(request, 'web/blog_list.html', {'posts': posts})
|
||||
|
||||
|
||||
def blog_detail(request, slug):
|
||||
"""Детальная страница поста блога"""
|
||||
post = get_object_or_404(BlogPost, slug=slug, status=BlogPost.PUBLISHED)
|
||||
post.views += 1
|
||||
post.save(update_fields=['views'])
|
||||
return render(request, 'web/blog_detail.html', {'post': post})
|
||||
|
||||
|
||||
# ========== News Views ==========
|
||||
def news_list(request):
|
||||
"""Список всех опубликованных новостей"""
|
||||
news = NewsArticle.objects.filter(is_published=True).order_by('-published_date')
|
||||
return render(request, 'web/news_list.html', {'news': news})
|
||||
|
||||
|
||||
def news_detail(request, slug):
|
||||
"""Детальная страница новости"""
|
||||
article = get_object_or_404(NewsArticle, slug=slug, is_published=True)
|
||||
return render(request, 'web/news_detail.html', {'article': article})
|
||||
|
||||
|
||||
# ========== Portfolio Views ==========
|
||||
def portfolio_list(request):
|
||||
"""Список всех активных элементов портфолио"""
|
||||
category_id = request.GET.get('category')
|
||||
items = PortfolioItem.objects.filter(is_active=True)
|
||||
|
||||
if category_id:
|
||||
items = items.filter(category_id=category_id)
|
||||
|
||||
categories = Category.objects.all()
|
||||
return render(request, 'web/portfolio_list.html', {
|
||||
'items': items,
|
||||
'categories': categories
|
||||
})
|
||||
|
||||
|
||||
def portfolio_detail(request, slug):
|
||||
"""Детальная страница элемента портфолио"""
|
||||
item = get_object_or_404(PortfolioItem, slug=slug, is_active=True)
|
||||
return render(request, 'web/portfolio_detail.html', {'item': item})
|
||||
|
||||
|
||||
# ========== Career Views ==========
|
||||
def career_list(request):
|
||||
"""Список всех активных вакансий"""
|
||||
vacancies = CareerVacancy.objects.filter(is_active=True).order_by('-posted_at')
|
||||
return render(request, 'web/career_list.html', {'vacancies': vacancies})
|
||||
|
||||
|
||||
def career_detail(request, slug):
|
||||
"""Детальная страница вакансии"""
|
||||
vacancy = get_object_or_404(CareerVacancy, slug=slug, is_active=True)
|
||||
return render(request, 'web/career_detail.html', {'vacancy': vacancy})
|
||||
|
||||
|
||||
# ========== Legal Pages Views ==========
|
||||
def privacy_policy(request):
|
||||
"""Страница политики конфиденциальности"""
|
||||
policy = PrivacyPolicy.objects.filter(is_active=True).first()
|
||||
return render(request, 'web/privacy_policy.html', {'policy': policy})
|
||||
|
||||
|
||||
def terms_of_use(request):
|
||||
"""Страница условий использования"""
|
||||
terms = TermsOfUse.objects.filter(is_active=True).first()
|
||||
return render(request, 'web/terms_of_use.html', {'terms': terms})
|
||||
|
||||
Reference in New Issue
Block a user