【问题标题】:DjangoTemplate + Javascript - How to compare javascript variable with django multiple valuesDjangoTemplate + Javascript - 如何将 javascript 变量与 django 多个值进行比较
【发布时间】:2020-05-23 17:17:06
【问题描述】:

如何将 javascript 变量“var1”与 django 多个值进行比较。 如果答案是好的,程序应该说¡very good!

Django + Javascript:

<script>
var var1 = document.getElementById("userAnswer").value;
        if (
            {% for textEUS in question.textEUS.all %}
                var1 == {{ textEUS }}
            {% endfor %}
        ){
            alert(¡Very good!);
        }
</script>

仅限 Django:

    {% for textEUS in question.textEUS.all %}
        {{ textEUS }}
    {% endfor %}

仅限 Javascript:

<script>
function tocorrect(){
        var var1 = document.getElementById("userAnswer").value;
        if (var1 == "answer"){
            alert(¡Very good!);
        }
}
</script>

【问题讨论】:

    标签: javascript django django-templates


    【解决方案1】:

    您尝试做的事情不可能像您尝试做的那样。这是事情的顺序:

    1. Django 使用 django 模板语言呈现页面。这个页面实际上可能包含 HTML、javascript 和文本。此时所有的 django 标签、过滤器、变量都已被评估和处理。例如:
        {% for textEUS in question.textEUS.all %}
            {{ textEUS }}
        {% endfor %}
    

    会变成文字列表。

    1. 上面呈现的页面被发送到您的用户浏览器
    2. 在浏览器中,页面被加载,javascript被执行,但是此时没有django template-tags等。

    重点是:

    您不能期望 django 模板标签与您的 javascript 同时“运行”。一个发生在后端,另一个发生在前端。

    但是,您可以在后端使用 django 模板语言设置一个 javascript 变量,然后在前端使用它:

    <script>
    var var1 = document.getElementById("userAnswer").value;
    
    // create a variable called textEusAll, this is completed in the backend
    // before the page is sent to the user
    var textEusAll = [
         {% for textEUS in question.textEUS.all %}
             "{{ textEUS }}"{% if not forloop.last %},{% endif %}
         {% endfor %}
    ]
    
    // use plain javascript for stuff happening in the front-end
    if (textEusAll.includes(var1)) {
        alert("¡Very good!");
    }            
    </script>
    

    【讨论】:

    • @julian 我刚刚注意到我的错字,应该说.includes(var1)我现在已经更正了。
    猜你喜欢
    • 2020-02-08
    • 2020-10-20
    • 1970-01-01
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多