【问题标题】:Pass in Django Template Variable to JS function将 Django 模板变量传递给 JS 函数
【发布时间】:2020-10-23 17:55:54
【问题描述】:

在我的一个模板中,我有一个遍历所有项目的 for 循环。当一个人喜欢或不喜欢一个项目时,我想用我的函数来处理它。将按钮的 HTML 设置为类似这样的工作:

            <button onclick='update_like(arg1, arg2)'></button>{{ item.id}}

但是,我需要将模板变量传递给函数。所以我尝试了这样的事情:

            <button onclick='update_like({{item.id}}, {{item.name}})'></button>{{ item.name}}

但点击按钮只会输出:Uncaught SyntaxError: Unexpected token 'default'

这是我正在使用的完整模板的精简版:

{% extends 'base.html' %}
{% load static %}

{% block content %}
<div class="list">
    {% for item in items %}
               <button onclick='update_like({{item.id}}, {{item.name}})'></button>{{ item.name}}
    {% endfor %}
</div>

 <script>
 var count = {};
 function update_like(item_id, item_name) {
     count[item_id] = 1;
     console.log(count);
     return; 
 }
 </script>
{% endblock %}

【问题讨论】:

    标签: javascript html django django-views django-templates


    【解决方案1】:

    假设 item.id 是数字,item.name 是字符串。您必须像这样引用您的价值:

    <button onclick="update_like({{item.id}}, '{{item.name}}')"></button>{{ item.name}}
    

    为确保上述代码安全:将item.name 中的' 替换为\'(通过自定义过滤器)或不允许在item.name 中使用单引号

    【讨论】:

    • 工作,谢谢!所以在我的实际代码中,我只传入了自动生成的 id 字段,而不是名称,但它仍然会出错。我的迁移文件显示 ID 字段被创建为自动字段,并且根据此处的 django 文档:docs.djangoproject.com/en/3.0/ref/models/fields autofield 是一个 IntegerField,但我仍然需要按照您在答案中的方式对其进行转义
    猜你喜欢
    • 2018-12-26
    • 2014-03-10
    • 2019-04-03
    • 2020-10-20
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2018-12-03
    相关资源
    最近更新 更多