Skip to main content

django-templatetag-renderer

Динамический рендерер для получения html-кода, возвращаемого шаблонными тегами Django (templatetags). Позволяет отрендерить любой simple_tag из любого приложения проекта по HTTP-запросу — без импорта этих тегов и без знания об их существовании на этапе разработки. Плюс JS-загрузчик, который подставляет результат в HTML-элементы с data-tag-url.

Установка:

pip install django-templatetag-renderer
# или
uv add django-templatetag-renderer

Быстрый старт

Добавьте приложение в INSTALLED_APPS:

INSTALLED_APPS = [
    # ...
    "django.contrib.staticfiles",
    "templatetag_renderer",
]

Подключите URL-ы:

# urls.py
from django.urls import include, path

urlpatterns = [
    path("render/", include("templatetag_renderer.urls")),
]

Используйте в шаблоне:

    {% load static renderer_tags %}
    <link rel="stylesheet" href="{% static 'templatetag_renderer/renderer.css' %}">

    {% render_slot "greeting" "World" %}
    {% render_slot "counter" 0 2 5 %}
    {% render_slot "price" 999 currency="USD" %}
    {% render_slot "greeting" "Alice" lib="shop_tags" element="aside" %}

    <script src="{% static 'templatetag_renderer/renderer.js' %}"></script>

HTTP API

URLS

/render/<template_tag_name>/  Найти <template_tag_name> в любой библиотеке проекта и отрендерить
/render/<tag_lib>/<template_tag_name>/    Явно указать библиотеку <tag_lib> и тег <template_tag_name>

Аргументы — в query-string:

?args=VALUE — позиционный (можно повторять).
?<name>=VALUE — именованный (keyword).

Автоматическое приведение типов: int, float, true/false, none, иначе строка.

curl 'http://localhost:8000/render/greeting/?args=World'
curl 'http://localhost:8000/render/counter/?args=0&args=2&args=5'
curl 'http://localhost:8000/render/price/?args=1234567&currency=USD'
curl 'http://localhost:8000/render/shop_tags/greeting/?args=Alice'

Как это работает

1. django.template.backends.django.get_installed_libraries() обходит всеINSTALLED_APPS, находит подпакеты templatetags/ и возвращает словарь {short_name: dotted_path}.
2. View импортирует найденный модуль и проверяет наличие тега в register.tags.
3. Собирает шаблон на лету: {% load shop_tags %}{% counter _p0 _p1 _p2 %}
Значения из URL кладутся в контекст под служебными именами _p0,
_k_currency — тег получает уже типизированные значения.

Template(src).render(RequestContext(request, ctx)) → HttpResponse.

JS API

// точечный рендер
TemplatetagRenderer.renderSlots(document.querySelector("#sidebar"));

// хуки
TemplatetagRenderer.setOptions({
  fetcher: customFetch,           // свой fetch (CSRF, ретраи, кэш)
  onRender(el, html) { /* ... */ },
  onError(el, err)   { /* ... */ },
});

Разработка

Проект использует uv.

git clone https://github.com/mandalay-rp/django-templatetag-renderer
cd django-templatetag-renderer
uv sync                     # создаст .venv и uv.lock
uv run pytest -v            # тесты
uv run ruff check .         # линтер
uv run ruff format .        # формат

# запустить минимальный пример
cd examples/minimal
uv run python manage.py runserver

Сборка дистрибутивов

uv build                    # wheel + sdist в ./dist/
uv publish                  # публикация на PyPI (нужен токен или trusted publishing)

Безопасность

По умолчанию рендерятся все теги проекта. На проде:

  • закройте /render/ аутентификацией или ограничением по IP;
  • задайте белый список разрешённых тегов;
  • помните, что JS вставляет HTML без санитайза (как |safe);
  • не выставляйте эндпоинт в публичный интернет без необходимости.

Лицензия

MIT.

Metadata

Release files for django-templatetag-renderer 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-templatetag-renderer 0.1.0
File Size Uploaded Provenance
django_templatetag_renderer-0.1.0.tar.gz 11.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for django-templatetag-renderer 0.1.0
File Interpreter ABI Platform
django_templatetag_renderer-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.6 kB

Release files / django_templatetag_renderer-0.1.0.tar.gz

Download URL django_templatetag_renderer-0.1.0.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6a76518705059fe04cd2de0310ba1d6c8a57d93229e6029d1803367a621c22c5
BLAKE2b-256 checksum
How to use checksums
9af78a3f0f59bb70318261fc30ffb12c62cf40a860025e67e16342a9c6176e70
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":null,"id":"forky","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Release files / django_templatetag_renderer-0.1.0-py3-none-any.whl

Download URL django_templatetag_renderer-0.1.0-py3-none-any.whl
Size 10.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
7ab79537b9dda7379bf6deb75c3b65e7baff91a17dee2844efca7cd45d2b49e8
BLAKE2b-256 checksum
How to use checksums
fb3e165d42d873ba65e239f18b4bf377bea63d3c50a0978236d759219cc88db7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":null,"id":"forky","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

Security for django-templatetag-renderer 0.1.0

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page