106 lines
3.1 KiB
Python
106 lines
3.1 KiB
Python
import operator
|
|
|
|
from django.core.paginator import Paginator
|
|
from django.db.models import Q
|
|
from django.shortcuts import render
|
|
|
|
from journal.models import Article, Author, Issue, Tag, Category, FeaturedArticle
|
|
from cms.models import Page
|
|
|
|
|
|
def index(request):
|
|
|
|
latest_issues = Issue.objects.order_by('-date')
|
|
|
|
inquiry = Category.objects.get(slug='inquiry')
|
|
theory = Category.objects.get(slug='theory')
|
|
bulletins = Category.objects.get(slug='bulletins')
|
|
featured_articles = FeaturedArticle.objects.all()
|
|
large_features = featured_articles.filter(is_thumb=False)
|
|
small_features = featured_articles.filter(is_thumb=True)
|
|
|
|
context = {
|
|
'issues': Issue.objects.filter(published=True).order_by('-number'),
|
|
'categories': Category.objects.all(),
|
|
'large_features': large_features,
|
|
'small_features': small_features,
|
|
'themes': theory.tags.all(),
|
|
'bulletin_publications': bulletins.tags.all(),
|
|
'inquiry_sectors': inquiry.tags.all(),
|
|
'latest_issue': latest_issues[0],
|
|
'previous_issue': latest_issues[1],
|
|
}
|
|
|
|
return render(request, 'index.html', context)
|
|
|
|
|
|
def about(request):
|
|
page = Page.objects.get(slug='about')
|
|
editors = Author.objects.filter(is_editor=True).order_by('name')
|
|
contributors = Author.objects.filter(
|
|
is_editor=False,
|
|
articles__published=True
|
|
).order_by('name').distinct()
|
|
|
|
context = {
|
|
'page': page,
|
|
'editors': editors,
|
|
'contributors': contributors,
|
|
}
|
|
|
|
return render(request, 'about.html', context)
|
|
|
|
|
|
def contribute(request):
|
|
page = Page.objects.get(slug='contribute')
|
|
|
|
context = {
|
|
'page': page,
|
|
}
|
|
|
|
return render(request, 'contribute.html', context)
|
|
|
|
|
|
def archives(request, page=1, category='all'):
|
|
# If the provided category doesn't match any existing slugs, set to 'all'
|
|
filters = ['all']
|
|
for category_slug in Category.objects.values_list('slug', flat=True):
|
|
filters.append(category_slug)
|
|
if category not in filters:
|
|
category = 'all'
|
|
|
|
query = request.GET.get('q', '')
|
|
if len(query) >= 3:
|
|
all_articles = Article.objects.filter(published=True).filter(
|
|
Q(title__icontains=query) | Q(subtitle__icontains=query)
|
|
)
|
|
|
|
# If there are tag or authors containing this query, display them.
|
|
tags = Tag.objects.filter(name__icontains=query)
|
|
authors = Author.objects.filter(name__icontains=query)
|
|
else:
|
|
all_articles = Article.objects.filter(
|
|
published=True
|
|
)
|
|
if category != 'all':
|
|
all_articles = all_articles.filter(category__slug=category)
|
|
tags = Tag.objects.none()
|
|
authors = Author.objects.none()
|
|
|
|
paginator = Paginator(all_articles.order_by('-date'), 10)
|
|
articles = paginator.get_page(page)
|
|
|
|
context = {
|
|
'articles': articles,
|
|
'page': page,
|
|
'total_pages': paginator.num_pages,
|
|
'total_articles': all_articles.count(),
|
|
'query': query,
|
|
'tags': tags,
|
|
'authors': authors,
|
|
'filters': filters,
|
|
'category': category,
|
|
}
|
|
|
|
return render(request, 'archives.html', context)
|