2017-08-15 57 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 %} 

希望这将帮助别人同样的问题。