将变量传递给自定义Django模板标记

时间:2012-05-19 23:58:37

标签: python django django-templates

我在自己的django应用程序中添加了自动完成功能。

HTML

<script type="text/javascript"> 
            var a = {% get_fields_task_name %}
            $( "#auto_task_name" ).autocomplete({
              source: a           
            });

视图

def get_fields_task_name():    
    task = Task.objects.all()    
    output = []

    for e in task:
        output.append(e.name)

    x = json.dumps(output)
    return x
get_fields_task_name = register.simple_tag(get_fields_task_name)

我需要将参数传递给get_fields_task_name,我该如何在模板而不是{% get_fields_task_name %}中执行此操作?

1 个答案:

答案 0 :(得分:6)

这取决于参数究竟是什么,但是如果它是模板渲染时可以在单个变量中获得的东西,只需将其作为参数添加到函数(see the docs for simple_tag)。

例如:

@register.simple_tag
def get_fields_task_name(kind):
    tasks = Task.objects.filter(kind=kind)
    return json.dumps([e.name for e in tasks])

(使用列表推导使函数体更短更干净,并且还使用更好的装饰器语法)。

然后您只需将模板中的相关行更改为

即可
var a = {% get_fields_task_name some_variable.kind %};