I would like to be able to allow any template file to add its own
JavaScript. Seemed like an easy implementation:

class AddScriptNode(Node):
  def __init__(self, scripts=[]):
    self.scripts = scripts

  def render(self, context):
    context['scripts'] = self.scripts + context['scripts']
    return ''

@register.tag
def add_scripts(parser, token):
  bits = list(token.split_contents())
  if len(bits) > 1:
    return AddScriptNode(bits[1:])
  else:
    return AddScriptNode()

{% add_scripts moo moo-more nativelib pnc %}

Note that I add the existing scripts to the end of the added scripts
because templates seem to be evaluated bottom-to-top, meaning a simple
extend() call would cause the sub-template scripts to be at the
beginning of the list (no good).

The trouble is that this code clobbers context['scripts'] each time
render() is called. I have no idea why that is, because if I replace
that line with:

context['scripts'].extend(self.scripts)

then the scripts are added to the end, and nothing is clobbered. The
same goes for the equivalent:

context['scripts'] += self.scripts

This makes no sense to me. What's going on here?

Thomas

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to