2014-02-16 3 views
1

템플릿의 일부 데이터에 액세스하려고합니다. 나는 내가 지금하고있는 방식이 최선의 방법이라고 생각하지 않지만, 다른 방법으로도 절반을 얻을 수는 없다.템플릿의 Django dict

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.iteritems %}''을 사용하여 값에 액세스하십시오. – okm

+0

@okm 게시물 응답 –

답변

2

modules가에 moduleData 것을 얻을 could't 귀하의보기 코드. 그러나 moduleDatadict이고 dict을 반복하면 해당 값이 아닌 해당 키가 산출됩니다.

당신은 값을 반복 할 필요가 시도 : 여기

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

달콤한 것을 보여 주려고. 어떻게 HTML을 이스케이프 처리하지 못하게 할 수 있습니까? 예를 들어 " 대신 "etc – Dan

+0

@Dan이 표시됩니다. 이스케이프를 사용하지 않도록 설정하면 XSS 공격이 원활해질 수 있습니다. 수행중인 작업을 알면 다음과 같이하십시오. ['safe'] (https://docs.djangoproject.com/en/dev/ref/templates/builtins/#std:templatefilter-safe) 템플릿 필터를 사용하여'{{module.widget_mqtt_js | safe}}' –

+0

감사합니다. @Thomas Orozco, 그렇습니다. JS가 모듈의 일부로 데이터베이스에 저장된 JS를 삽입하기 때문에 확실합니다. – Dan