首页 > 解决方案 > 处理 jQuery 中传递给 django 模板的对象列表以进行 Ajax 调用

问题描述

我的views.py函数如下:

def method(request):
    objects = Model1.objects.all()
    return render(request, 'manager/link.html', {'objects': object})

在我的模板中,link.html 我有以下代码:

<script>
        $('#nav').on('click', function (event) {
            $('#stock_holdings').text('Loading...');
            var stocks = ({{ stocks|get_list|safe }});
            $.ajax({
                type: "GET",
                url: '{% url 'broker:load_data' %}',
                data: {
                    'stocks': stocks,
                },
                dataType: 'json',
                success: function (data) {
                    $('#stock_holdings').text(data['stocks_details']);
                }
            });
        })
        ;
    </script>

其中 get_list 是将查询集转换为对象列表的自定义标记:

@register.filter
def get_list(queryset):
    return list(queryset)

但是,当代码运行时出现以下错误,我在浏览器调试窗口中看到了它:

错误:

Uncaught SyntaxError: Unexpected token '<'

导致错误的行:

var stocks = ([<broker: stock1>, <broker: stock2>]);

看起来对象列表中的“<”导致了错误。有人可以帮忙解决这个问题吗?

标签: jquerydjango

解决方案


list(queryset)只会给你一个模型对象的列表。您可能需要模型的字典表示,这可能有效list(queryset.values())
而且不建议以这种方式呈现 javascript。尝试创建一个返回 json 的视图并进行 ajax 调用来获取它。还将某些 html 标记中所需的 url 呈现为数据属性。


推荐阅读