【问题标题】:Django HTML templates - storing a JSON object somewhere on the pageDjango HTML 模板 - 在页面某处存储 JSON 对象
【发布时间】:2016-09-25 11:22:24
【问题描述】:

我知道这在某种程度上不是类似 stackoverflow 的问题,但请不要禁止我这样做。我真的需要一个最佳实践建议。

我有一个在 HTML 模板上呈现表格的 Django 视图。 我的目标是在客户端验证用户输入数据,验证的一部分与复杂数据分析有关,该分析考虑了未在表中呈现的数据。我不能使用用户定义的属性,因为我有一个根据过滤条件隐藏行的表的过滤器,如果过滤器不为空,我的数据验证将基于解析所有表行不正确。

更新:出于这个原因,我将 JSON 对象从我的 Django 视图传递到 HTML 模板。但问题是我无法将其传递给外部 JS 文件。

例如,假设我有一个如下指定的可编辑表格。

<tbody json_failed_attempt = {{json_object}}>
    {% for vendor in vendors_table %}
    <tr>
        <td class = 'click_this_row'>
            {{vendor.legal_entity.name}}
        </td>
     </tr>
    {% endfor %}
</tbody>

jQuery

$('td.click_this_row').on('change', function()
    {
         // HOW SHOULD I PARSE THROUGH THE JSON ???
         // This alert outputs this:
         // "[{"model":"
         alert ($('#vendorsTable tbody').attr('legal_entities_json'))
    } 

Django 视图:

def vendors(request):

    vendors_table = Vendors.objects.all()
    legal_entities_queryset = LegalEntities.objects.all()
    legal_entities_json = serializers.serialize('json', legal_entities_queryset, fields=('inn', 'kpp'))

    return render_to_response('vendors/vendors_list.html',
                             {'vendors_table':vendors_table, 
                              'legal_entities_json' : legal_entities_json},
                               context_instance=RequestContext(request))

这种方法可行吗?如果是,为什么我不能在这里使用 parseJSON?循环应该是什么样子?

【问题讨论】:

    标签: jquery json django


    【解决方案1】:

    只需在您的 javascript 中使用 JSON.parse

    JSON.parse($('#vendorsTable tbody').attr('legal_entities_json'))
    

    另一种方法是创建 javascript 变量并将 JSON 对象分配给它(因为 JSON 是有效的 javascript 对象)。在您的模板中:

    <script>
    var data = {{ json_object }};
    </script>
    

    然后在你的外部 JS 文件中使用 data 变量。

    【讨论】:

    • @EdgarNavasardyan 在包含外部 JS 脚本之前是否设置了 data 变量?您也可以尝试将data 设置为window 对象属性:window.my_data = {{ json_object }};
    • 谢谢,这两种方法现在都有效。唯一困扰我的问题是,如果用户查看页面源,他们可以看到数据。从某种意义上说,这不构成一个饱腹感问题吗?
    • @EdgarNavasardyan 我认为这不构成安全问题。 Django 对此类问题具有默认保护。 docs.djangoproject.com/es/1.9/topics/security/…
    猜你喜欢
    • 2012-12-11
    • 2012-11-16
    • 2011-05-12
    • 2017-12-29
    • 1970-01-01
    • 2021-08-01
    • 2018-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多