2012-05-19 107 views
0

我正在向我的django应用程序添加自动完成功能。将变量传递给自定义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

@BenRosnick对......现在我想到了,我没有看到通过模板标签做这件事的好处,而不是从原始视图中传入。 – Dougal

回答

5

这取决于参数是什么,但如果它是在模板渲染时可以获得单个变量的东西,只需将它作为参数添加到函数(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 %}; 
+0

非常感谢你,你的回答非常有帮助。 – ahmed

相关问题