Làm cách nào để bạn hiển thị dữ liệu JSON một cách an toàn trong một ứng dụng web django?An toàn Sử dụng JSON với html bên trong JSON trong Mẫu Django
Trên máy chủ trong django tôi tạo dữ liệu JSON và sau đó hiển thị dữ liệu JSON đó trong mẫu django. JSON đôi khi chứa các đoạn mã html. Hầu hết thời gian, tuy nhiên, nếu thẻ </script>
nằm bên trong dữ liệu JSON khi nó được hiển thị, nó sẽ phá hủy javascript xung quanh.
Ví dụ ...
Trên máy chủ, trong python tôi sẽ có điều này:
template_data = {
'my_json' : '[{"my_snippet": "<b>Happy HTML</b>"}]'
}
# pass the template data to the django template
return render_to_response('my_template.html', template_data, context_instance = c)
Và sau đó trong mẫu:
<script type="text/javascript">
var the_json = {{my_json|safe}};
</script>
... some html ...
Các kết quả html hoạt động tốt và trông giống như sau:
<script type="text/javascript">
var the_json = [{"my_snippet": "<b>Happy HTML</b>"}];
</script>
... some html ...
Tuy nhiên, bạn gặp vấn đề khi nào, trên máy chủ, JSON trông như thế này:
template_data = {
'my_json' : '[{"my_snippet": "Bad HTML</script>"}]'
}
return render_to_response('my_template.html', template_data, context_instance = c)
Bây giờ, khi nó được trả lại, bạn sẽ nhận được:
<script type="text/javascript">
var the_json = [{"my_snippet": "Bad HTML</script>"}];
</script>
... some html ...
Thẻ kịch bản lệnh đóng trong mã JSON được coi là đóng toàn bộ khối tập lệnh. Tất cả javascript của bạn sau đó sẽ phá vỡ.
Một giải pháp có thể là kiểm tra </script>
khi chuyển dữ liệu mẫu vào mẫu, nhưng tôi cảm thấy có cách tốt hơn.
Bạn có thể phục vụ nó như json (thông qua AJAX) hoặc phục vụ nó như là một tập tin javascript (sau đó bao gồm nó bằng cách sử dụng một thẻ script). – DanielB