Add JSON-LD support to entries too, mostly so Google can understand the site a little better
This commit is contained in:
parent
371401d441
commit
7090db3c37
3 changed files with 34 additions and 2 deletions
|
@ -1,9 +1,11 @@
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.contrib.sites.models import Site
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from slugify import slugify
|
from slugify import slugify
|
||||||
from textwrap import shorten
|
from textwrap import shorten
|
||||||
|
from urllib.parse import urljoin
|
||||||
|
|
||||||
from meta.models import ModelMeta
|
from meta.models import ModelMeta
|
||||||
from users.models import Profile
|
from users.models import Profile
|
||||||
|
@ -97,6 +99,31 @@ class Entry(ModelMeta, models.Model):
|
||||||
def slug(self):
|
def slug(self):
|
||||||
return slugify(self.name)
|
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:
|
class Meta:
|
||||||
verbose_name_plural = 'entries'
|
verbose_name_plural = 'entries'
|
||||||
ordering = ['-published']
|
ordering = ['-published']
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{% load friendly_url humanize markdown shortlink %}<article class="card h-entry">
|
{% load friendly_url humanize jsonify markdown shortlink %}<article class="card h-entry">
|
||||||
{% if entry.photo %}<img class="card-img-top u-photo" src="{{ entry.photo.url }}" />{% endif %}
|
{% if entry.photo %}<img class="card-img-top u-photo" src="{{ entry.photo.url }}" />{% endif %}
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
{% if entry.name %}<h4 class="card-title p-name">{{ entry.name }}</h4>{% endif %}
|
{% if entry.name %}<h4 class="card-title p-name">{{ entry.name }}</h4>{% endif %}
|
||||||
|
@ -32,4 +32,5 @@
|
||||||
</a>
|
</a>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</div>
|
</div>
|
||||||
|
<script class="p-json-ld" type="application/ld+json">{{ entry.json_ld | jsonify }}</script>
|
||||||
</article>
|
</article>
|
||||||
|
|
|
@ -36,6 +36,10 @@ class User(ModelMeta, AbstractUser):
|
||||||
# This is gonna need to change if I ever decide to add multiple-user support ;)
|
# This is gonna need to change if I ever decide to add multiple-user support ;)
|
||||||
url = '/'
|
url = '/'
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return '{0} {1}'.format(self.first_name, self.last_name)
|
||||||
|
|
||||||
def get_absolute_url(self):
|
def get_absolute_url(self):
|
||||||
return self.url
|
return self.url
|
||||||
|
|
||||||
|
@ -65,7 +69,7 @@ class User(ModelMeta, AbstractUser):
|
||||||
'@type': 'Person',
|
'@type': 'Person',
|
||||||
'@id': urljoin(base, self.url),
|
'@id': urljoin(base, self.url),
|
||||||
'url': urljoin(base, self.url),
|
'url': urljoin(base, self.url),
|
||||||
'name': '{0} {1}'.format(self.first_name, self.last_name),
|
'name': self.name,
|
||||||
'email': self.email,
|
'email': self.email,
|
||||||
'image': urljoin(base, self.avatar.url),
|
'image': urljoin(base, self.avatar.url),
|
||||||
'givenName': self.first_name,
|
'givenName': self.first_name,
|
||||||
|
|
Loading…
Reference in a new issue