Ticket #9977: csrf_templatetag2.diff

File csrf_templatetag2.diff, 1.7 KB (added by Bob Thomas, 15 years ago)

don't output when token is missing; don't output multiple id fields

  • django/contrib/csrf/templatetags/csrf.py

     
     1from django import template
     2
     3register = template.Library()
     4
     5class CsrfTokenNode(template.Node):
     6    def __init__(self, useid=True):
     7        self.useid = useid
     8   
     9    def render(self, context):
     10        csrf_token = context.get('csrf_token')
     11        if csrf_token:
     12            return ('<div style="display:none;">'
     13                    '<input type="hidden" %s'
     14                    'name="csrfmiddlewaretoken" value="%s" /></div>'
     15                    ) % (self.useid and 'id="csrfmiddlewaretoken" ' or '', csrf_token)
     16        else:
     17            return ''
     18
     19@register.tag
     20def csrf_token(parser, token):
     21    args = token.contents.split()
     22   
     23    if u'noid' in args[1:] or hasattr(parser, '_csrf_used'):
     24        return CsrfTokenNode(False)
     25    else:
     26        parser._csrf_used = True
     27        return CsrfTokenNode()
  • django/contrib/csrf/context_processors.py

     
     1from django.contrib.csrf.middleware import _make_token
     2
     3def csrf(request):
     4    if hasattr(request, 'session'):
     5        return {'csrf_token': _make_token(request.session.session_key)}
     6    else:
     7        return {}
Back to Top