在 Django 中编写模板标签并不容易,并且涉及大量样板代码。最不痛苦的方法是什么?
- 有没有任何库?
- 有没有不涉及第三方应用的技巧?
- 你的方法是什么?
(一旦我弄清楚如何做,我就会把这篇文章变成一个社区维基。)
在 Django 中编写模板标签并不容易,并且涉及大量样板代码。最不痛苦的方法是什么?
(一旦我弄清楚如何做,我就会把这篇文章变成一个社区维基。)
尝试 django-classy-tags https://github.com/ojii/django-classy-tags
有一些库:
以前用过。让一切变得更简单,但我不知道如何用它处理大量可选参数。
使用示例::
''' {% 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-tagcon,被原作者抛弃
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']
我使用了 fancy_tag 装饰器:http: //pypi.python.org/pypi/fancy_tag
非常简单和强大,它带有很好的文档。
当您只想将模板标签的输出分配给上下文变量时,摆脱所有的样板。还处理(可变长度)参数和关键字参数。
比例如 django-templatetag-sugar 更容易使用。
除了内置的包含标签装饰器之外,我真的不需要其他任何东西。