2017-09-26 48 views
-1

現在的index.html是我想補充這是對應到這個列表的內容的數量數

<html> 
 <head> 
 <script type="text/javascript" src="//code.jquery.com/jquery-1.11.0.min.js"></script> 
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.8.2/chosen.jquery.min.js"></script> 
    <script src="//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.jquery.js"></script> 
 <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/chosen/1.4.2/chosen.css"> 
 </head> 
 <body> 
    <select id="mainDD" data-placeholder="Choose" class="chzn-select" style="width:600px;"> 
    {% for i in json_data.items.values %} 
      <option>{{ i }}</option> 
    {% endfor %} 
    </select> 
    <select name="type" id="type1"> 
    {% for j in json_data.type1.values %} 
      <option>{{ j }}</option> 
    {% endfor %} 
    </select> 
    <select name="type" id="type2"> 
    {% for k in json_data.type2.values %} 
      <option>{{ k }}</option> 
    {% endfor %} 
    </select> 
    <select name="type" id="type3"> 
    {% for l in json_data.type3.values %} 
      <option>{{ l }}</option> 
    {% endfor %} 
    </select> 
    <select name="type" id="type4"> 
    {% for m in json_data.type4.values %} 
      <option>{{ m }}</option> 
    {% endfor %} 
    </select> 

    <script type="text/javascript"> 

     $(document).ready(function() { 

      $('#mainDD').on('change', function() { 
       console.log($(this).val()); 
       console.log($('#mainDD :selected').text()) ; 

       var thisType = "type" + $(this).val(); 

       for(i=1; i<5; i++) { 
        var thisId = "type" + i; 
        console.log(thisType + " " + thisId); 
        if(thisType !== thisId) { 
        $("#"+thisId).hide(); 
        } 
        else { 
        $("#"+thisId).show(); 
        } 
       } 

      }).trigger('change'); 

     }); 


    </script> 

    </body> 
</html> 

我想補充數量一樣。所以標記我的理想輸出是

<select name="type" id="type1"> 
     <option value="1">a-1</option> 
     <option value="2">a-2</option> 
     <option value="3">a-3</option> 
     <option value="4">a-4</option> 
    </select> 
    <select name="type" id="type2"> 
     <option value="5">b-1</option> 
     <option value="6">b-2</option> 
     <option value="7">b-3</option> 
     <option value="8">b-4</option> 
     <option value="9">b-5</option> 
    </select> 
    <select name="type" id="type3"> 
     <option value="10">c-1</option> 
     <option value="11">c-2</option> 
    </select> 
    <select name="type" id="type4"> 
     <option value="12">d-1</option> 
     <option value="13">d-2</option> 
     <option value="14">d-3</option> 
    </select> 

但現在j & k & l & m被json文件讀取,並且這個jon文件可能是不同的內容數量。例如,現在j{'type1': [{'---': '---', ‘A’: ‘a’, ‘B’: ‘b’, ‘C: ‘c’, ‘D’: ‘d’}]}但是也許將來j有{'type1': [{'---': '---', ‘A’: ‘a’, ‘B’: ‘b’}]}{'type1': [{'---': '---', ‘A’: ‘a’, ‘B’: ‘b’, ‘C: ‘c’, ‘D’: ‘d’,'E':'e','F','f'}]}所以我想通過使用數值顯示這些值,但我不明白我該怎麼做。我該如何寫它? views.py是

from collections import OrderedDict 
from django.shortcuts import render 
import json 

def index(request): 
    with open('./data/data.json', 'r') as f: 
     json_data = json.loads(f.read(), object_pairs_hook=OrderedDict) 
    return render(request, 'index.html', {'json_data': json_data}) 

通過觀察一個答案,我在寫的index.html

{% preprocessed = [] %} 
{% counter = 0 %} 
{% for key in ["type1", "type2", "type3", "type4"]: %} 
{% values = [(i + counter, value) for i, value in enumerate(json_data[key].values())] %} 
{% preprocessed.append((key, values)) %} 
{% counter = len(data[key]) %} 
{% for key, values in preprocessed %} 
<select name="type" id="{{ key }}"> 
{% for counter, value in values %} 
    <option value="{{ counter }}">{{ value }}-{{counter}}</option> 
{% endfor %} 
</select> 
{% endfor %} 

TemplateSyntaxError在/應用/ 無效塊標記上線14: '預處理'。你忘了註冊或加載這個標籤嗎?錯誤發生。

+0

這個數字是否需要對應於特定的數據?如果是這樣,你可能會有一段糟糕的時間,因爲json文件沒有以任何特定的順序通過。 –

+0

@TimmSimpkins是的它確實如此。但我不這麼認爲,因爲我使用OrderedDict – user8634222

回答

0

不知道爲什麼你需要一個連續的編號,因爲你可以用jQuery做一些聰明的事情,但是如果你想得到如你所示的輸出,你可以預處理你的json_data(在views.py中):

from collections import OrderedDict 
from django.shortcuts import render 
import json 

def index(request): 
    with open('./data/data.json', 'r') as f: 
     json_data = json.loads(f.read(), object_pairs_hook=OrderedDict) 
     preprocessed = [] 
     counter = 0 
     for key in ["type1", "type2", "type3", "type4"]: 
      values = [(i + counter, value) for i, value in enumerate(json_data[key].values())] 
      preprocessed.append((key, values)) 
      counter = len(data[key]) 
    return render(request, 'index.html', {'preprocessed': preprocessed}) 

再經過這在上下文(變成index.html):

{% for key, values in preprocessed %} 
    <select name="type" id="{{ key }}"> 
    {% for counter, value in values %} 
     <option value="{{ counter }}">{{ value }}-{{counter}}</option> 
    {% endfor %} 
    </select> 
{% endfor %} 
+0

是的,這是我理想的東西。我更新了我的問題,寫了你的代碼,但是錯誤發生了。你認爲我應該在視圖中寫下你的第一個代碼嗎? .py?我怎樣才能傳遞變量的預處理&計數器呈現views.py? – user8634222

+0

你可以按照我的views.py代碼編寫代碼嗎? – user8634222

+0

頂部應該放在views.py中,而不是在模板中。我編輯了答案。 – georgeofallages

相關問題