2014-02-16 98 views
1

我試圖訪問模板中的一些數據。我不認爲我現在這樣做的方式是最好的方式,但我甚至無法用其他方式做到一半。模板中的Django字典

def room(request, room_id): 
     #get room data 
     room = Room.objects.filter(id=room_id).get() 
     modules = [] 
     #pull all actuator devices for the room 
     actuators = Device.objects.filter(room_id=room_id,type="actuator") 
     #build a list of modules then use set to remove duplicates 
     for actuator in actuators.values(): 
       module = Module.objects.get(module_id=actuator["module_id"]).name_only() 
       modules.extend([module]) 
     modlist = list(set(modules)) 
     moduleData = {} 
     #loop through the modules, pull out the required data and send it all off to the template 
     for module in modlist: 
       data = Module_List.objects.get(name=module) 
       dict = {"name": data.name, "widget_mqtt_js": data.widget_mqtt_js, "widget_setup_js": data.widget_setup_js, "widget_body": data.widget_body} 
       moduleData[module] = dict 
       print dict["widget_mqtt_js"] 
     context = {"room_name" : room.name, "actuators" : actuators, "modules" : moduleData} 
     return render(request, 'control/room.html', context) 

這是我的代碼,因爲它代表。我遇到的問題是我的模板中的循環返回空白。它看起來像這樣:

{% for module in modules %} 
    {{module.widget_mqtt_js}} 
{% endfor %} 

我認爲會有辦法與MODULE_LIST模型做到這一點,但我便無法拿到工作或者..

+1

'module'這裏是modules'的'每個迭代的關鍵。使用'{%for module_name,modules in modules.iteritems%}'來訪問值。 – okm

+0

@okm帖子回覆 –

回答

2

在模板方面modulesmoduleData在您的查看代碼。但是moduleDatadict,並且通過對dict的迭代產生其鍵,而不是其值。

你需要遍歷的值,請嘗試:

{% for module in modules.values %} 
    {{module.widget_mqtt_js}} 
{% endfor %} 
+0

甜蜜讓它出現。你能告訴我如何阻止它被HTML轉義嗎?例如,我得到"而不是「etc – Dan

+0

@丹你確定這是可取的嗎?記住禁用轉義可以促進XSS攻擊。如果你確實知道你在做什麼,那麼你就是這麼做的: '{{module.widget_mqtt_js | safe}}',使用['safe'](https://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatefilter-safe)模板過濾器。 –

+0

謝謝@Thomas Orozco,是的,我敢肯定,因爲它插入存儲在數據庫中的JS作爲模塊的一部分。 – Dan