[英]Django referencing Javascript variable in server side template code
我有一个页面可以动态添加文本框,在动态添加的文本框中,我想访问相关的上下文变量。 为此,我需要以某种方式在javascript代码/模板代码中使用'i'变量来引用上下文中的值。 这是我的javascript代码,我需要在其中使用“ i”作为上下文列表的索引:
<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,而curr_sn是python代码给出的上下文列表。
我需要在其中使用“ i”的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 %}
这里的“ i”是由for循环生成的,但是我仍然需要访问相同的列表。
如何在代码的两个部分中做到这一点? 我所能找到的对我已经相反的方式(在javascript代码中使用django模板)。
谢谢
编辑:对于javascript方面,我找到了一个解决方案(因为我注意到无论如何我的代码都是多余的,并试图在js&html中做类似的事情)。 对于javascript部分,我使用:
{% if curr_sn|length > 1 %}
i = {{ curr_sn|length }}
{% endif %}
只是为了从当前的板数开始计数。 现在,我需要解决html部分,以在上下文变量curr_sn
显示已保存的木板
也找到了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 %}
希望这对其他有相同问题的人有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.