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)
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)
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)
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)
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)
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)
def testDuplicateKeywordArgs(self): def callback(tagname, a): pass self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag a=a a=b', callback))
def testArgumentsOrder(self): def callback(tagname, first, third, second): pass self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag first second=second third', callback))
def testKeywordArgumentNames(self): def callback(tagname, _1): pass self.assertRaises(SyntaxError, lambda: parse_tag_contents('tag 1="1"', callback))
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)
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))
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)
def testTagName(self): def callback(tagname, _1): pass self.assertRaises(SyntaxError, lambda: parse_tag_contents(' "" "1"', callback))
def testWhitespace(self): def callback(tagname, _1, _2): self.assertEqual(_1({}), '1') self.assertEqual(_2({}), '2') parse_tag_contents(' tag "1" "2" ', callback)
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)