示例#1
0
 def testBasic(self):
   def callback(tagname, _1, _2, _3):
     self.assertEqual(tagname, 'tag')
     self.assertEqual(_1({}), '')
     self.assertEqual(_2({'something': 5}), 5)
     self.assertEqual(_3({}), '"')
   parse_tag_contents(r'tag "" something "\""', callback)
示例#2
0
 def testArguments(self):
   def callback(tagname, first, second, **kwargs):
     context = {'first': 1, 'second': 2, 'third': 3, 'fourth':4}
     self.assertEqual(first(context), 1)
     self.assertEqual(second(context), 2)
     self.assertEqual(kwargs['third'](context), 3)
     self.assertEqual(kwargs['fourth'](context), 4)
   parse_tag_contents('tag first second fourth=fourth third=third', callback)
示例#3
0
def path(parser, token):
  '''Block template tag to render path.

  See example usage in this module's documentation.
  '''
  def callback(tagname, label=None, url=None, urlname=None):
    if label is None and url is None and urlname is None:
      nodelist = parser.parse(('endpath',))
      parser.delete_first_token()
      return PathNode(tagname, nodelist)
    elif label is not None and (url is not None or urlname is not None):
      # WARNING: Undocumented festures of Django are used here.

      from django.template import FilterExpression, NodeList, Parser, VariableNode
      from django.template.loader_tags import BlockNode

      nodelist = NodeList()
      nodelist.append(VariableNode(FilterExpression('block.super', Parser(''))))
      nodelist.append(PathComponentNode(tagname, label, url, urlname))

      nodelist2 = NodeList()
      nodelist2.append(BlockNode('path', nodelist))
      return NodeListNode(nodelist2)
    else:
      raise template.TemplateSyntaxError('%s tag syntax error' % tagname)
  return parse_tag_contents(token.contents, callback)
示例#4
0
def path_component_nolink(parser, token):
  '''Template tag to render path component without URL.

  See example usage in this module's documenation.
  '''
  def callback(tagname, label):
    return PathComponentNode(tagname, label)
  return parse_tag_contents(token.contents, callback)
示例#5
0
def path_component(parser, token):
  '''Template tag to render path component.

  See example usage in this module's documentation.
  '''
  def callback(tagname, label, url=None, urlname=None):
    if url is None and urlname is None:
      raise template.TemplateSyntaxError('%s tag syntax error' % tagname)
    return PathComponentNode(tagname, label, url, urlname)
  return parse_tag_contents(token.contents, callback)
示例#6
0
def title(parser, token):
  '''Block template tag to render title.

  See example usage in this module's documentation.
  '''
  def callback(tagname, label=None):
    if label is None:
      nodelist = parser.parse(('endtitle',))
      parser.delete_first_token()
      return TitleNode(tagname, nodelist)
    else:
      # WARNING: Undocumented festures of Django are used here.

      from django.template import FilterExpression, NodeList, Parser, VariableNode
      from django.template.loader_tags import BlockNode

      nodelist = NodeList()
      nodelist.append(TitleComponentNode(tagname, label))
      nodelist.append(VariableNode(FilterExpression('block.super', Parser(''))))

      nodelist2 = NodeList()
      nodelist2.append(BlockNode('title', nodelist))
      return NodeListNode(nodelist2)
  return parse_tag_contents(token.contents, callback)
示例#7
0
 def testDuplicateKeywordArgs(self):
   def callback(tagname, a):
     pass
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag a=a a=b', callback))
示例#8
0
 def testArgumentsOrder(self):
   def callback(tagname, first, third, second):
     pass
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag first second=second third', callback))
示例#9
0
 def testKeywordArgumentNames(self):
   def callback(tagname, _1):
     pass
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag 1="1"', callback))
示例#10
0
 def testKeywordArguments(self):
   def callback(tagname, var2, var1):
     self.assertEqual(var2({}), "'anything'")
     self.assertEqual(var1({'something': 5}), 5)
   parse_tag_contents(r"tag var1=something var2='\'anything\''", callback)
示例#11
0
 def testInvalidVariableNames(self):
   def callback(tagname, _1):
     pass
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag vari{able', callback))
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag Qпривет', callback))
   self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag 1', callback))
示例#12
0
 def testVariableNames(self):
   def callback(tagname, _1):
     vari_able = {'_member': {'_1': 5}}
     self.assertEqual(_1({'vari_able': vari_able}), 5)
   parse_tag_contents('tag vari_able._member._1', callback)
示例#13
0
 def testTagName(self):
   def callback(tagname, _1):
     pass
   self.assertRaises(SyntaxError, lambda: parse_tag_contents(' "" "1"', callback))
示例#14
0
 def testWhitespace(self):
   def callback(tagname, _1, _2):
     self.assertEqual(_1({}), '1')
     self.assertEqual(_2({}), '2')
   parse_tag_contents(' tag  "1"   "2"  ', callback)
示例#15
0
def title_component(parser, token):
  '''Template tag to render title component.

  See example usage in this module's documentation.
  '''
  return parse_tag_contents(token.contents, TitleComponentNode)