|
|
|
@ -1,9 +1,11 @@
|
|
|
|
|
from django.contrib.auth import get_user_model |
|
|
|
|
from django.contrib.sites.models import Site |
|
|
|
|
from django.db import models |
|
|
|
|
from django.urls import reverse |
|
|
|
|
from itertools import groupby |
|
|
|
|
from slugify import slugify |
|
|
|
|
from textwrap import shorten |
|
|
|
|
from urllib.parse import urljoin |
|
|
|
|
|
|
|
|
|
from meta.models import ModelMeta |
|
|
|
|
from users.models import Profile |
|
|
|
@ -97,6 +99,31 @@ class Entry(ModelMeta, models.Model):
|
|
|
|
|
def slug(self): |
|
|
|
|
return slugify(self.name) |
|
|
|
|
|
|
|
|
|
@property |
|
|
|
|
def json_ld(self): |
|
|
|
|
base = 'https://' + Site.objects.get_current().domain |
|
|
|
|
url = urljoin(base, self.url) |
|
|
|
|
|
|
|
|
|
posting = { |
|
|
|
|
'@context': 'http://schema.org', |
|
|
|
|
'@type': 'BlogPosting', |
|
|
|
|
'@id': url, |
|
|
|
|
'url': url, |
|
|
|
|
'mainEntityOfPage': url, |
|
|
|
|
'author': { |
|
|
|
|
'@type': 'Person', |
|
|
|
|
'url': urljoin(base, self.author.url), |
|
|
|
|
'name': self.author.name, |
|
|
|
|
}, |
|
|
|
|
'headline': self.title, |
|
|
|
|
'description': self.excerpt, |
|
|
|
|
'datePublished': self.published.isoformat(), |
|
|
|
|
'dateModified': self.updated.isoformat(), |
|
|
|
|
} |
|
|
|
|
if self.photo: |
|
|
|
|
posting['image'] = (urljoin(base, self.photo.url), ) |
|
|
|
|
return posting |
|
|
|
|
|
|
|
|
|
class Meta: |
|
|
|
|
verbose_name_plural = 'entries' |
|
|
|
|
ordering = ['-published'] |
|
|
|
|