Opened 10 years ago
Last modified 8 months ago
#23356 new Cleanup/optimization
Unable to create template tag which behaves similar to {% verbatim %} — at Initial Version
Reported by: | Jacob Rief | Owned by: | nobody |
---|---|---|---|
Component: | Template system | Version: | dev |
Severity: | Normal | Keywords: | verbatim |
Cc: | Triage Stage: | Accepted | |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | yes |
Easy pickings: | no | UI/UX: | no |
Description
Currently it is impossible to create custom template tags which behave similar to {% verbatim %}
.
The reason is in Lexer.create_token()
. There, the class member self.verbatim
is set for template blocks in "verbatim" state. It is impossible to turn on that state from outside, ie. a template tag.
Fixing this, would be as simple as changing if block_content[:9] in ('verbatim', 'verbatim ')
to if block_content.startswith('verbatim')
or to if block_content[:9] in ('verbatim', 'verbatim ', 'verbatim_')
.
Then all template tags beginning with verbatim..., would start in "verbatim" state. I don't assume this will break any existing code; who starts the name of a templatetag with 'verbatim...' if not for that purpose?
Background information why this is useful:
Templates syntax for Django and AngularJS is very similar, and with some caveats it is possible to reuse a Django template for rendering in AngularJS. I therefore attempted to add a context sensitive variation of the verbatim tag to this app https://github.com/jrief/django-angular, but was hindered by this issue.
BTW: This part of the Django code did not change from 1.6 up to master.