2017-08-15 74 views
0

我有一個頁面,動態添加文本框,並在動態添加的文本框中,我想訪問相關的上下文變量。 爲此,我需要使用JavaScript代碼/模板代碼中的'i'變量來引用上下文中的值。 這裏是我的javascript代碼,我需要用 '我' 作爲一個上下文列表索引:Django引用Javascript變量在服務器端模板代碼

<script> 
var i = 2 

function add_field() 
{ 
    var table = document.getElementById("tbl_location").getElementsByTagName('tbody')[0]; 

    var input_name = document.createElement("th") 
    input_name.appendChild(document.createTextNode("S/N " + i)) 

    var input_tb = document.createElement("td") 
    var input = document.createElement('input'); 
    input.setAttribute("name", "sn" + i); 
    {% if curr_sn.i %} 
    input.setAttribute("value", {{ curr_sn.i }}); 
    {% endif %} 
    input_tb.appendChild(input) 

    var input_row = document.createElement("tr") 
    input_row.appendChild(input_name) 
    input_row.appendChild(input_tb) 

    table.appendChild(input_row); 
    i++; 
} 

的具體線路是:

{% if curr_sn.i %} 
input.setAttribute("value", {{ curr_sn.i }}); 
{% endif %} 

其中 'i' 是一個javascript veriable,而curr_sn是python代碼給出的上下文列表。

HTML部分,我需要用「我」:

{% for i in max_board_list %} 
    {% if curr_sn.i %} 
     <tr> 
      <th>S/N {{ i }}</th> 
      <td><input type="text" name="sn{{ i }}" value="{{ curr_sn.i }}"></td> 
     </tr> 
    {% endif %} 
{% endfor %} 

這裏「我」是由產生的for循環,但我仍然需要訪問相同的列表。

我該如何在兩部分代碼中做到這一點?所有我可以找到相反的方式已經適用於我(在JavaScript代碼中使用Django模板)。

感謝

編輯: JavaScript的身邊,我發現了一個解決方案(因爲我注意到,反正我的代碼是多餘的,並試圖做類似的事情在JS & HTML)。對於JavaScript的一部分,我用:

{% if curr_sn|length > 1 %} 
i = {{ curr_sn|length }} 
{% endif %} 

只是爲了保持計數從板的當前數目。 現在我需要解決html部分以顯示上下文變量中保存的板子curr_sn

+0

說實話我很難理解你的問題。謹慎闡述? – Y2H

+0

我有一個頁面,可以接受不同數量的板名輸入(默認爲顯示1行,並且用戶可以通過單擊鏈接到add_field()函數的按鈕來添加更多字段。當用戶提交表單時,如果出現錯誤,我想在它們各自的文本框中保留它的名稱,我嘗試這樣做的方法是在名爲'curr_sn'的上下文中將名稱保存在python側面代碼中。回到html代碼中,我想檢查一下,如果列表中當前主板的值存在,我想顯示它。js&html部件都不適用於我 – Jonathan

回答

0

找到了html部件的解決方案。 我只是使用自定義過濾器來執行檢查。 我已經註冊了兩個過濾器:

@register.filter(name='is_in') 
def is_in(index, list): 
    if list is None: 
     return False 
    try: 
     list[int(index)] 
     return True 
    except: 
     return False 

@register.filter(name='get_value') 
def get_value(index, list): 
    if list is None: 
     return False 
    try: 
     return list[int(index)] 
    except: 
     return None 

而在HTML部分我用的是以下幾點:

{% for i in max_board_list %} 
    {% if i|is_in:curr_sn %} 
     <tr> 
      <th>S/N {{ i }}</th> 
      <td><input type="text" name="sn{{ i }}" value="{{ i|get_value:curr_sn }}"></td> 
     </tr> 
    {% endif %} 
{% endfor %} 

希望這將幫助別人同樣的問題。