繁体   English   中英

Django在服务器端模板代码中引用Javascript变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM