簡體   English   中英

django模板:根據等於某個標簽值的密鑰獲取字典的值

[英]django template: get dictionary's value based on the key that equals to certain tag's value

我對Web開發很陌生,我知道這可能是一種愚蠢的方法,但我想不出更好的方法。 在views.py中,方法以下列格式將名為sniffer_aps的字典返回給模板:

sniffer_aps = {device1:[ap1, ap2], device2:[ap3, ap4, ap5], ......}

在模板中,我有一個下拉列表,列出了所有設備(device1,device2,......)。

在另一個字段中,我列出了屬於下拉列表中所選設備的所有aps。 我想根據我選擇的設備動態調整字段,但它確實不起作用。

下拉列表代碼是:

<select onchange="refresh(this.value)" id="sniffer_list">
            {% for sniffer_ap in sniffer_aps %}
                <option value={{ sniffer_ap }}>{{ sniffer_ap.plug_ip }}</option>
            {% endfor %}
</select>

我的問題是,如何根據下拉列表中選擇的選項循環顯示aps字段中的值?

現在我的方法是使用javascript來檢測下拉列表的“onchange”事件,並相應地更改列出所有aps的字段的值,然后只獲取字段的值並將其視為字典的鍵。

function refresh(key) {
        $('.router').attr('value') = key;
}

對於列出aps的字段,問題出在哪里。 我正在努力實現這樣的目標:

<select multiple="multiple" size="6">
                {% for router in sniffer_aps[this.value] %}
                    <option class="router" value="">{{ router }}</option>
                {% endfor %}
</select>

請糾正我的方法,或者如果有人能提供更好的方法。 非常感謝。

你在這里遇到了麻煩,因為你將服務器端代碼(Django的模板引擎)與客戶端代碼(你用於onchange處理程序的Javascript代碼)混淆了。 在將生成的HTML傳遞到客戶端之前,您的服務器端代碼將在服務器上運行,因此您不能在客戶端Javascript和模板邏輯之間進行任何交互。

您可以使用Javascript和onchange事件來更新列出應用程序的字段中的值 - 您可以在服務器上執行此操作,方法是在返回新請求時提交表單並使用Django更改HTML,但這需要一個新的網頁加載,並不像使用Javascript那樣快速或用戶友好。

我會接受這個:

  1. 在Django視圖類中將字典轉換為JSON:

     import json ... sniffer_app_json = json.dumps(sniffer_apps) 
  2. 在模板代碼中將JSON輸出為JavaScript對象:

     var snifferApps = {{ sniffer_apps_json }}; 
  3. 使用JavaScript更新apps字段,使用此數據。 在StackOverflow上解決 這個 問題很多 問題 - 您可以考慮使用jQuery,因為它使這種操作更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM