在Django中编写模板标签并不容易,并且需要大量的样板代码。 什么是最痛苦的方法呢?
(一旦我想要怎么做,我会把这篇文章作为社区维基。)
答案 0 :(得分:6)
尝试使用django-classy-tags https://github.com/ojii/django-classy-tags
答案 1 :(得分:4)
有一些libs:
之前使用它。使每个事情变得更简单,但我无法想象如何使用它来处理许多可选参数。
用法示例::
''' {% example_tag for val as asvar %} '''
@tag(register, [
Constant("for"), Variable(),
Optional([Constant("as"), Name()]),
])
def example_tag(context, val, asvar=None):
if asvar:
context[asvar] = val
return ""
else:
return val
django-ttag, django-tagcon的分支
由于基于类的方法和关键字参数支持(如{% output limit=some_limit|default:1 offset=profile.offset %}
)
示例用法::
class Welcome(ttag.Tag):
''' {% welcome current_user fallback "Hello, anonymous." %} '''
user = ttag.Arg(positional=True)
fallback = ttag.Arg(default='Hi!')
def output(self, data)
name = data['user'].get_full_name()
if name:
return 'Hi, %s!' % name
return data['fallback']
答案 2 :(得分:0)
我使用fancy_tag装饰器:http://pypi.python.org/pypi/fancy_tag
非常简单和强大,它带有很好的文档。
当您只想将模板标记的输出分配给上下文变量时,删除所有样板文件。还处理(可变长度)参数和关键字参数。
比django-templatetag-sugar更容易使用。
除了内置的包含标签装饰器之外,我还没有其他任何需要。