Skip to main content

Create custom renditions from django url fields

Project description

django-url-renditions

django-url-renditions allows to define and render renditions from django url fields. This works also pretty well with django-s3direct fields.

It comes with a Graphene Query that enable renditions in your GraphQL schema.

Install

pip install django-url-renditions

Add url_renditions to your INSTALLED_APPS

Define your model

from django.db import models
from url_renditions.fields import FileUrlWithRenditions

# django-url-renditions comes with a simple image resizer method.
# Look at the implementation if you need something more specific
from url_renditions.resize_image import ResizeImage

class Track(models.Model):
    original_artwork = models.URLField()
    artwork = FileUrlWithRenditions(
        source='original_artwork',
        use_job_runner=True, #  if we want to queue the job with django_rq
        renditions={
            'small': ResizeImage('80x80'),
            'medium': ResizeImage('300x300'),
        }
    )

That way, when a Track model get created with an original_artwork, artwork will be automatically polulated with two renditions: small and medium.

To access them, use:

r = my_track.artwork.rendition_set.get(name='small')
print('url:', r.href, 'width:', r.width, 'height:', r.height)

Graphql with Graphene

Add url_renditions.graphql_schema.Query to your root query.

import graphene
import url_renditions.graphql_schema  # noqa

class Query(
        ...
        url_renditions.graphql_schema.Query,
        graphene.ObjectType):
    pass

schema = graphene.Schema(query=Query)

Then when you ask for

{
  track(id: "VHJhY2s6OA==") {
    artwork {
      renditions {
        medium {
          href
          width
          height
        }
      }
    }
  }
}

You get

{
  "data": {
    "track": {
      "artwork": {
        "renditions": {
          "medium": {
            "href": "https://images.unsplash.com/photo-1474314170901-f351b68f544f",
            "width": 300,
            "height": 300
          }
        }
      }
    }
  }
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-url-renditions-1.4.tar.gz (6.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page