94 lines
2.8 KiB
Python
94 lines
2.8 KiB
Python
from django.shortcuts import render
|
|
from django.http import HttpResponse
|
|
from collections import deque
|
|
|
|
from .models import Post, PostSerializer
|
|
from taggit.models import Tag
|
|
from rest_framework import viewsets
|
|
from rest_framework import permissions
|
|
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
from django.core.cache import cache
|
|
|
|
from django.utils.text import slugify
|
|
from django.utils import timezone
|
|
from django.http import JsonResponse
|
|
|
|
def get_next_dict():
|
|
posts=Post.news_objects.order_by('-public_date').values('slug')
|
|
print(posts)
|
|
d={}
|
|
print(d)
|
|
for k,v in enumerate(posts):
|
|
if k ==len(posts)-1:
|
|
break
|
|
d[v['slug']]=posts[k+1]['slug']
|
|
print(d)
|
|
return d
|
|
|
|
# Create your views here.
|
|
def index(request):
|
|
posts=deque(Post.objects.order_by('-public_date').all())
|
|
f=lambda p: p.tags
|
|
t=map(f, posts)
|
|
|
|
return render(request, 'posts/index.html', {"posts": posts, "tags_list": t })
|
|
|
|
def tags(request,tag=""):
|
|
posts=deque(Post.objects.filter(tags__name=tag))
|
|
return render(request, 'posts/index.html', {"posts": posts, "tags_list":None })
|
|
|
|
def show(request,id=None):
|
|
if id.isdigit() or id is int:
|
|
p=Post.objects.get(id=int(id))
|
|
elif id != ""and not id is None:
|
|
p=Post.objects.get(slug=(id))
|
|
similar_posts = p.tags.similar_objects()
|
|
return render(request, 'posts/show.html', {"post":p,"next":get_next_dict().get(p.slug,None), "related_posts": similar_posts})
|
|
|
|
# Ajax function that is called to calculate a slug from the title
|
|
def slug_calc(request):
|
|
|
|
if request.method == "GET":
|
|
get = request.GET.copy()
|
|
title = get['title']
|
|
|
|
datetime_now = timezone.now()
|
|
date_str = datetime_now.strftime("%Y-%m-%d")
|
|
|
|
slug_str = slugify(date_str)+"-"+slugify(title)
|
|
|
|
return HttpResponse(slug_str)
|
|
|
|
return HttpResponseServerError("Requires a title field.")
|
|
|
|
# Ajax function that returns autocomplete suggestions for a given tag input
|
|
def tag_complete(request):
|
|
|
|
if request.method == "GET":
|
|
get = request.GET.copy()
|
|
term = get['term']
|
|
|
|
tag_objects = Tag.objects.filter(name__istartswith=term)
|
|
|
|
tag_array =[]
|
|
for elem in tag_objects:
|
|
tag_array.append(elem.name)
|
|
|
|
return JsonResponse(tag_array, safe=False)
|
|
|
|
return HttpResponseServerError("Requires a term field.")
|
|
|
|
class PostViewSet(viewsets.ModelViewSet):
|
|
"""
|
|
API endpoint that allows users to be viewed or edited.
|
|
"""
|
|
queryset = Post.objects.all().order_by('-public_date')
|
|
serializer_class = PostSerializer
|
|
#permission_classes = [permissions.IsAuthenticated]
|
|
filter_backends = [DjangoFilterBackend]
|
|
filterset_fields = ['legacy_id', 'slug','legacy_rubrik_id']
|
|
lookup_field='slug'
|
|
def pre_save(self, obj):
|
|
obj.image = self.request.FILES.get('image')
|