2012-05-19 105 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

相關問題