base site for phantas.ma

This commit is contained in:
j 2023-03-02 15:59:40 +01:00
commit d27f4ac0c0
32 changed files with 50 additions and 710 deletions

View file

@ -41,7 +41,7 @@ class Text(models.Model):
created = models.DateTimeField(auto_now_add=True)
modified = models.DateTimeField(auto_now=True)
language = models.CharField(choices=LANGUAGE_CHOICES, max_length=8, default='en')
slug = models.SlugField()
slug = models.CharField(max_length=1024)
public = models.BooleanField(default=False)
listed = models.BooleanField("List this item on overview page", default=True)
position = models.IntegerField(default=0)
@ -50,14 +50,14 @@ class Text(models.Model):
byline = models.TextField(default="", blank=True)
body = models.TextField(default="", blank=True)
data = models.JSONField(default=dict)
data = models.JSONField(default=dict, blank=True)
annotations = models.JSONField(default=dict, blank=True, editable=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return '/' + settings.URL_PREFIX + 'cuts/' + self.slug
return '/' + self.slug
def get_annotations(self):
api = ox.api.signin(settings.DEFAULT_PANDORA_API)
@ -165,21 +165,11 @@ class Text(models.Model):
super().save(*args, **kwargs)
def json(self):
from ..video.models import Film
data = {}
data['title'] = self.title
data['byline'] = self.byline
data['body'] = self.body
data['language'] = self.language
item_id = self.data.get('related')
if not item_id:
item_id = self.data.get('item')
if item_id:
item = Film.objects.filter(pandora_url=item_id).first()
if item:
for key in ('title', 'title_zh', 'director'):
data['item_' + key] = item.data[key]
data['item_url'] = item.get_absolute_url()
if isinstance(self.annotations, list) and len(self.annotations) > 0:
data['annotations'] = self.annotations
data.update(self.data)

View file

@ -3,7 +3,6 @@ from django.shortcuts import render, redirect, get_object_or_404
from django.conf import settings
from . import models
from ..video.views import get_stream_prefix
def fallback(request, slug=''):
if not slug:
@ -13,26 +12,17 @@ def fallback(request, slug=''):
return render(request, 'fallback.html', context)
def index(request):
from ..video.models import Film
from ..text.models import Text
context = {}
context['films'] = Film.objects.filter(public=True).count()
context['texts'] = Text.objects.filter(public=True, listed=True).count()
context['stream_prefix'] = get_stream_prefix(request)
featured = Film.objects.filter(featured=True)
featured_count = featured.count()
if featured_count:
featured = featured[random.randint(0, featured_count - 1)]
try:
featured = featured.data['items'][0]['id']
except:
featured = None
context['featured'] = featured
context['texts'] = Text.objects.filter(public=True, listed=True).order_by('title')
return render(request, 'index.html', context)
def page(request, slug=''):
print('page!!', slug)
context = {}
if request.user.is_staff:
if slug == "":
return index(request)
elif request.user.is_staff:
page = models.Page.objects.filter(slug=slug).first()
else:
page = models.Page.objects.filter(slug=slug, public=True).first()
@ -40,7 +30,7 @@ def page(request, slug=''):
context['page'] = page
return render(request, 'page.html', context)
else:
return render(request, 'fallback.html', context)
return text(request, slug)
def about(request):
context = {}
@ -54,11 +44,11 @@ def texts(request):
return render(request, 'texts.html', context)
def text(request, slug):
print('find text', slug)
context = {}
if request.user.is_staff:
context['text'] = get_object_or_404(models.Text, slug=slug)
else:
context['text'] = get_object_or_404(models.Text, slug=slug, public=True)
context['stream_prefix'] = get_stream_prefix(request)
context['pandora_url'] = settings.DEFAULT_PANDORA_API.replace('/api/', '')
return render(request, 'text.html', context)