Use smaller image URL for listing
This commit is contained in:
parent
09c4b93245
commit
24d92f4760
4 changed files with 31 additions and 17 deletions
|
@ -100,11 +100,19 @@ class BaseContentPage(BasePage):
|
||||||
@cached_property
|
@cached_property
|
||||||
def hero_image_url(self) -> Optional[str]:
|
def hero_image_url(self) -> Optional[str]:
|
||||||
if self.hero_unsplash_photo_id is not None:
|
if self.hero_unsplash_photo_id is not None:
|
||||||
return self.hero_unsplash_photo.get_hero_image_url()
|
return self.hero_unsplash_photo.get_image_urls()["regular"]
|
||||||
elif self.hero_image_id is not None:
|
elif self.hero_image_id is not None:
|
||||||
return generate_image_url(self.hero_image, "width-1200")
|
return generate_image_url(self.hero_image, "width-1200")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@cached_property
|
||||||
|
def list_image_url(self) -> Optional[str]:
|
||||||
|
if self.hero_unsplash_photo_id is not None:
|
||||||
|
return self.hero_unsplash_photo.get_image_urls()["small"]
|
||||||
|
elif self.hero_image_id is not None:
|
||||||
|
return generate_image_url(self.hero_image, "width-400")
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
class ContentPage(BaseContentPage):
|
class ContentPage(BaseContentPage):
|
||||||
subpage_types: list[Any] = []
|
subpage_types: list[Any] = []
|
||||||
|
@ -114,7 +122,11 @@ class ListingPage(BaseContentPage):
|
||||||
def get_context(self, request: HttpRequest) -> dict:
|
def get_context(self, request: HttpRequest) -> dict:
|
||||||
context = super().get_context(request)
|
context = super().get_context(request)
|
||||||
context["child_pages"] = (
|
context["child_pages"] = (
|
||||||
self.get_children().live().specific().select_related("hero_image")
|
self.get_children()
|
||||||
|
.live()
|
||||||
|
.specific()
|
||||||
|
.select_related("hero_image")
|
||||||
|
.select_related("hero_unsplash_photo")
|
||||||
)
|
)
|
||||||
return context
|
return context
|
||||||
|
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
<article class="media listing-item">
|
<article class="media listing-item">
|
||||||
<div class="columns">
|
<div class="columns">
|
||||||
<figure class="media-left column is-3 image-column">
|
<figure class="media-left column is-3 image-column">
|
||||||
{% if page.hero_image_url %}
|
{% if page.list_image_url %}
|
||||||
<a href="{% pageurl page %}" class="image">
|
<a href="{% pageurl page %}" class="image">
|
||||||
<img src="{{ page.hero_image_url }}">
|
<img src="{{ page.list_image_url }}">
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</figure>
|
</figure>
|
||||||
|
|
|
@ -35,7 +35,7 @@ class ContentPageTestCase(TestCase):
|
||||||
self.assertEqual(response.status_code, 200)
|
self.assertEqual(response.status_code, 200)
|
||||||
|
|
||||||
def test_queries(self) -> None:
|
def test_queries(self) -> None:
|
||||||
with self.assertNumQueries(15):
|
with self.assertNumQueries(16):
|
||||||
self.client.get(self.page.url)
|
self.client.get(self.page.url)
|
||||||
|
|
||||||
|
|
||||||
|
@ -57,13 +57,5 @@ class ListingPageTestCase(TestCase):
|
||||||
self.assertEqual(len(response.context["child_pages"]), 2)
|
self.assertEqual(len(response.context["child_pages"]), 2)
|
||||||
|
|
||||||
def test_queries(self) -> None:
|
def test_queries(self) -> None:
|
||||||
expected_queries = 18
|
with self.assertNumQueries(19):
|
||||||
|
|
||||||
with self.assertNumQueries(expected_queries):
|
|
||||||
self.client.get(self.page.url)
|
|
||||||
|
|
||||||
# Add another page, and check queries don't change
|
|
||||||
ContentPageFactory(parent=self.page)
|
|
||||||
|
|
||||||
with self.assertNumQueries(expected_queries):
|
|
||||||
self.client.get(self.page.url)
|
self.client.get(self.page.url)
|
||||||
|
|
|
@ -1,7 +1,17 @@
|
||||||
|
from typing import TypedDict
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
|
||||||
|
class ImageURLs(TypedDict):
|
||||||
|
raw: str
|
||||||
|
full: str
|
||||||
|
regular: str
|
||||||
|
small: str
|
||||||
|
thumb: str
|
||||||
|
|
||||||
|
|
||||||
class UnsplashPhoto(models.Model):
|
class UnsplashPhoto(models.Model):
|
||||||
unsplash_id = models.CharField(unique=True, max_length=11, db_index=True)
|
unsplash_id = models.CharField(unique=True, max_length=11, db_index=True)
|
||||||
data = models.JSONField()
|
data = models.JSONField()
|
||||||
|
@ -11,8 +21,8 @@ class UnsplashPhoto(models.Model):
|
||||||
def get_description(self) -> str:
|
def get_description(self) -> str:
|
||||||
return self.data["description"]
|
return self.data["description"]
|
||||||
|
|
||||||
def get_hero_image_url(self) -> str:
|
def get_image_urls(self) -> ImageURLs:
|
||||||
return self.data["urls"]["regular"]
|
return self.data["urls"]
|
||||||
|
|
||||||
def get_thumbnail_url(self) -> str:
|
def get_thumbnail_url(self) -> str:
|
||||||
return self.data["urls"]["thumb"]
|
return self.get_image_urls()["thumb"]
|
||||||
|
|
Loading…
Reference in a new issue