Skip to main content

Generate <img> markup block for an image.

Project description

canonicalwebteam.image-template

A module to generate performant HTML image markup for images. The markup will:

  • Use native lazyloading if it's available
  • Output markup compatible with lazysizes noscript plugin
  • Explicitly define width and height attributes to avoid the page jumping effect
  • Prefix all image URLs with cloudinary CDN proxy URLs, to transform the image to the optimal size
  • Use predefined (2x) srcset break points for hidef screens

Parameters

  • url (mandatory string): The url to an image (e.g. https://assets.ubuntu.com/v1/9f6916dd-k8s-prometheus-light.png)
  • alt (mandatory string): Alt text to describe the image
  • width (mandatory integer): The number of pixels wide the image should be
  • height (mandatory integer): The number of pixels high the image should be
  • hi_def (mandatory boolean): Has an image been uploaded 2x the width and height of the desired size
  • loading (optional string, default: "lazy"): Set to "auto" or "eager" to disable lazyloading
  • attrs (optional dictionary): Extra <img> attributes (e.g. class or id) can be passed as additional arguments

Usage

The image_template function can be used directly to generate image Markup.

from canonicalwebteam import image_template

image_markup = image_template(
    url="https://assets.ubuntu.com/v1/450d7c2f-openstack-hero.svg",
    alt="",
    width="534",
    height="319",
    hi_def=True,
    loading="auto",
    attrs={"class": "hero", "id": "openstack-hero"},
)

However, the most common usage is to add it to Django or Flask template contexts, as an image function.

Add lazysizes

At the time of writing, the loading attribute is only natively supported in Chrome. Therefore we use lazysizes to enable loading in other browsers while still taking advantage of the native functionality when it's available.

If loading is set to "lazy" (the default) we will output the Markup in a format supported by lazysizes, with the noscript and native-loading plugins enabled.

To support this in your site you need to add the following script to the <head> of each page, above any <link> attributes:

<script src="https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js" defer></script>

Django usage

Add it as a template tag:

# myapp/templatetags.py

from canonicalwebteam import image_template
from django import template
from django.utils.safestring import mark_safe


register = template.Library()

@register.simple_tag
def image(*args, **kwargs):
    return mark_safe(image_template(*args, **kwargs))


# settings.py

TEMPLATES[0]["OPTIONS"]["builtins"].append("myapp.templatetags")

Use it in templates:

# templates/mytemplate.html

{% image url="https://assets.ubuntu.com/v1/9f6916dd-k8s-prometheus-light.png" alt="Operational dashboard" width="1040" height="585" hi_def=True %}

Flask usage

Add it as a template tag:

# app.py

from canonicalwebteam import image_template
from flask import Flask

app = Flask(__name__)

@app.context_processor
def utility_processor():
    return {"image": image_template}

Use it in templates, e.g.::

# templates/mytemplate.html

{{
  image(
    url="https://assets.ubuntu.com/v1/450d7c2f-openstack-hero.svg",
    alt="",
    width="534",
    height="319",
    hi_def=True,
    loading="auto",
    attrs={"class": "hero", "id": "openstack-hero"},
  ) | safe
}}

Generated markup

The output image markup will be e.g.:

<img
    src="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_534,h_319/https://assets.ubuntu.com/v1/450d7c2f-openstack-hero.svg"
    srcset="https://res.cloudinary.com/canonical/image/fetch/f_auto,q_auto,fl_sanitize,w_1068,h_638/https://assets.ubuntu.com/v1/450d7c2f-openstack-hero.svg 2x"
    alt=""
    width="534"
    height="319"
    loading="auto"
    class="hero"
    id="openstack hero"
/>

If loading is set to "lazy" (the default), the output markup will be wrapped in markup for lazysizes support:

<div class="lazyload" data-noscript>
  <noscript>
    <img ...>
  </noscript>
</div>

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

Built Distribution

File details

Details for the file canonicalwebteam.image-template-1.0.0.tar.gz.

File metadata

  • Download URL: canonicalwebteam.image-template-1.0.0.tar.gz
  • Upload date:
  • Size: 4.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.32.1 CPython/3.6.8

File hashes

Hashes for canonicalwebteam.image-template-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a716cff11331ae5eb86483d6dea0eb6c7bd4c990a5563b70bc1bed3c36ef9789
MD5 2bc48562d6e68dad03d96b9e381e411f
BLAKE2b-256 1f3305b73ca2ccca1a664893dd94af123162c741e1db005b221a7ae49d974996

See more details on using hashes here.

File details

Details for the file canonicalwebteam.image_template-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: canonicalwebteam.image_template-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 4.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.22.0 setuptools/44.0.0 requests-toolbelt/0.9.1 tqdm/4.41.1 CPython/3.7.6

File hashes

Hashes for canonicalwebteam.image_template-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 b44038a1cb3d67f551b091b7598e182750e75e193ae824260f55292a6375b0ee
MD5 6095315772656f708065bc8c15e2cfb1
BLAKE2b-256 33dcabef16fb5be4b111bb6f27bdace01fb89219b8bae05f00d57f88aa789db1

See more details on using hashes here.

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