django-simple-icons
Use Simple Icons, more than 3,400 SVG brand icons, in your Django and Jinja templates. The icons ship inside the package, so there is no CDN to call and no static files to collect. Each icon renders as inline SVG that follows the surrounding text color.
Installation
Install with the extra matching your template engine:
python -m pip install 'django-simple-icons[django]'
python -m pip install 'django-simple-icons[jinja]'
The package itself has no runtime dependencies and needs Python 3.12 or later.
Django
Add the app to INSTALLED_APPS so the template tag library can be loaded:
INSTALLED_APPS = [
...,
"django_simple_icons",
]
Then load the library and render an icon by its slug:
{% load simple_icons %}
{% simple_icon "django" %}
That produces a 24x24 inline SVG which inherits the current text color and is hidden from screen readers:
<svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor" aria-hidden="true"><path d="M11.146 0h3.924…"/></svg>
Sizing
size sets both width and height and defaults to 24:
{% simple_icon "django" size=48 %}
Pass size=None to omit both attributes, which is what you want when CSS classes
control the size:
{% simple_icon "django" size=None class="h-6 w-6" %}
Color
Icons use fill="currentColor" by default, so they follow the surrounding text. Pass
color="brand" to use the brand's official color, or any CSS color to set it directly:
{% simple_icon "django" color="brand" %}
{% simple_icon "django" color="#ff6600" %}
Extra attributes
Any other keyword argument becomes an attribute on the <svg> element, with
underscores converted to dashes:
{% simple_icon "django" class="h-6 w-6 text-green-700" data_controller="icon" %}
<svg viewBox="0 0 24 24" width="24" height="24" fill="currentColor" aria-hidden="true" class="h-6 w-6 text-green-700" data-controller="icon"><path d="M11.146 0h3.924…"/></svg>
Values are escaped, so data_test="a < 2" renders as data-test="a < 2".
Accessibility
Icons are decorative by default, so the upstream <title> is removed and
aria-hidden="true" is set. An icon next to a text label needs nothing more.
For a standalone icon that carries meaning, pass title=True to keep the brand name as
the accessible name, or pass a string to replace it:
{% simple_icon "django" title=True %}
{% simple_icon "django" title="Django framework" %}
Either form keeps role="img" and drops aria-hidden:
<svg role="img" viewBox="0 0 24 24" width="24" height="24" fill="currentColor"><title>Django framework</title><path d="M11.146 0h3.924…"/></svg>
Jinja
Register the function as a global on your environment:
from django_simple_icons.jinja import simple_icon
environment.globals["simple_icon"] = simple_icon
Call it with the same arguments as the Django tag:
{{ simple_icon("django") }}
{{ simple_icon("django", size=48, color="brand") }}
{{ simple_icon("django", title="Django framework") }}
The result is a markupsafe.Markup, so it renders unescaped under autoescaping.
Because class is a reserved word in Python, spell it class_ when calling the
function directly. The trailing underscore is stripped:
{{ simple_icon("django", class_="h-6 w-6") }}
Arguments
| Argument | Default | Description |
|---|---|---|
name |
required | The icon slug, such as "django" |
size |
24 |
Sets width and height; None omits both |
color |
"currentColor" |
Any CSS color, or "brand" for the brand's official color |
title |
False |
True keeps the brand name, a string replaces it |
**attrs |
none | Extra attributes; underscores become dashes |
Brand colors
get_brand_color returns a brand's official color, which is useful outside a template:
>>> from django_simple_icons import get_brand_color
>>> get_brand_color("django")
'#092E20'
Finding icon slugs
Slugs match the names on simpleicons.org, where you can
search the full set. An unknown slug raises IconDoesNotExist with suggestions:
>>> from django_simple_icons import get_brand_color
>>> get_brand_color("djngo")
Traceback (most recent call last):
...
django_simple_icons.IconDoesNotExist: Icon 'djngo' does not exist. Did you mean: django, deno, fandango? Browse the available icons at https://simpleicons.org/
Supported versions
- Python 3.12, 3.13 and 3.14
- Django 5.2, 6.0 and 6.1 are tested. Django is declared as
>=4.2because the code uses nothing newer, but only the tested versions are supported. - Jinja2 2.8 and later
Versioning
The package version mirrors the bundled Simple Icons release, so version 16.26.0 contains Simple Icons 16.26.0. A fix to this package that ships no new icons appends a fourth segment, such as 16.26.0.1.
License
The code in this package is MIT licensed. The icons come from Simple Icons and are CC0-1.0.
Brand icons and names are trademarks of their respective owners. Using an icon does not imply endorsement, and some brands restrict how their marks may be used. Read the Simple Icons legal disclaimer before shipping an icon.
Metadata
Release files for django-simple-icons 16.30.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_simple_icons-16.30.0.tar.gz | 2.6 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| django_simple_icons-16.30.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 5.3 MB
Release files / django_simple_icons-16.30.0.tar.gz
| Download URL | django_simple_icons-16.30.0.tar.gz |
|---|---|
| Size | 2.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa4fdd8587ec2be1f78a1a4009086a181bed50ff8b97f13f16416d69c70261d0
|
|
BLAKE2b-256 checksum How to use checksums |
842c854140fd1f4c69709fd0f13efd0f6228adccb18083f6af029d8a0061f625
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency logRelease files / django_simple_icons-16.30.0-py3-none-any.whl
| Download URL | django_simple_icons-16.30.0-py3-none-any.whl |
|---|---|
| Size | 2.6 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f7185ec4dd8df289a28a811fe46e1cd8c37058c3d4b493ee2d63c264fd3f13b6
|
|
BLAKE2b-256 checksum How to use checksums |
fc2de80b6260fc5f4f6516a5c9ab307cea086a0174fad5482833d082afba0198
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 9, 2026.
Transparency log