django 自定义标签内联或块
Posted
技术标签:
【中文标题】django 自定义标签内联或块【英文标题】:django custom tag inline or block 【发布时间】:2012-03-08 01:01:46 【问题描述】:我想知道是否有办法检查标签是否有结束块。我基本上是想让用户这样做
% mytag 'a' 'b' 'c' %
或
% mytag 'a' 'b' 'c' %
<!-- other markup here -->
% end mytag %
我看到如果它不存在它会引发异常,但是有没有办法以编程方式设置我的标签以安全地处理这两种情况?
【问题讨论】:
【参考方案1】:您可以尝试解析直到结束标记,如果未找到则捕获异常。如果您还遇到另一个 mytag 节点,您可能想要停止:
def do_mytag_stuff(parser, token):
# Process your token however you need
mytag_args = token.split_contents()
try:
nodelist = parser.parse(('endmytag', 'mytag'))
token = parser.next_token()
if token.contents == 'endmytag':
# Found an ending tag, make a node for its contents
parser.delete_first_token()
return MyTagNode(nodelist, mytag_args)
except TemplateSyntaxError:
# Neither tag was found
pass
# So either there's no closing tag, or we met another mytag before a closing tag.
# Do whatever you would for a single tag here
return SingleMyTagNode(mytag_args)
不确定这是否 100% 正确,但希望它会有所帮助。
【讨论】:
我想我唯一担心的是这可能会掩盖其他问题。就像人们没有正确输入内容一样,包括 DNE 的模板等。 非常正确,我认为只有两个相似的标签会更干净。 这实际上可能是一个更好的解决方案,他们可以共享逻辑,所以它只是一个门面。 我接受了,但我认为更好的解决方案是公开两个标签或更改 except 以检查“预期的 endmytag 或我的标签”。它会阻止我们隐藏与我的标签无关的编译异常。以上是关于django 自定义标签内联或块的主要内容,如果未能解决你的问题,请参考以下文章