#35535: Simple block tag
-------------------------------------------+-----------------------------
Reporter: Jake Howard | Owner: Jake Howard
Type: New feature | Status: assigned
Component: Template system | Version: 5.0
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-------------------------------------------+-----------------------------
Django's template system allows creating custom tags, but they don't allow
taking content:
{{{#!django
{% mysimpletag foo="bar" %}
}}}
However there are plenty of use-cases where it'd be useful to also collect
content along with the tag, turning it into a "block" tag:
{{{#!django
{% mysimpletag foo="bar" %}
This content gets captured too
{% endmysimpletag %}
}}}
This currently requires using complex internals of the template system
(some documented, some not) to achieve. The
[https://github.com/django/django/blob/main/django/templatetags/cache.py
cache tag] is a good example of this kind of "simple" block, which
requires some parser internals.
I propose adding a `@register.simple_block` method to allow easy
registering of custom block tags. The API would be similar to
`simple_tag`, however with a required `content` argument containing the
(rendered) template content:
{{{#!python
@register.simple_block(takes_context=True)
def mysimpletag(context: Context, content: str, foo: str) -> str:
return f"foo = {foo}"
}}}
(Types added for reference)
I have a working demo of this I can push up.
--
Ticket URL: <https://code.djangoproject.com/ticket/35535>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/010701902f73e1e4-8ffdc190-cd34-426f-89a3-b3ef85e20529-000000%40eu-central-1.amazonses.com.