#23356: Unable to create template tag which behaves similar to {% verbatim %}
---------------------------------+--------------------------------------
     Reporter:  jrief            |                    Owner:  nobody
         Type:  Uncategorized    |                   Status:  closed
    Component:  Template system  |                  Version:  master
     Severity:  Normal           |               Resolution:  wontfix
     Keywords:  verbatim         |             Triage Stage:  Unreviewed
    Has patch:  1                |      Needs documentation:  0
  Needs tests:  0                |  Patch needs improvement:  0
Easy pickings:  0                |                    UI/UX:  0
---------------------------------+--------------------------------------
Description changed by shayneoneill:

Old 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.

New 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.

 For the purposes of anyone coming across this ticket and pulling their
 hair out over it, heres a template tag that might ease the pain;-
 {{{

 from django import template

 register = template.Library()

 @register.filter(name='specialbracket')
 def specialbracket(value):
     if value == 'left':
         return "{{"
     elif value == 'right':
         return "}}"
     else:
         return "??"
 }}}

 And the above example solved with this tag;-

 {{{
         <td class="field-{{ident}}">{{ 'left'|specialbracket }}
 computer.{{field}} {{ 'right'|specialbracket }} </td>

 }}}

--

--
Ticket URL: <https://code.djangoproject.com/ticket/23356#comment:2>
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 post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/063.34676a72cc29b693df21367df13d79a3%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to