2014-04-13 18 views
9

Tôi có điều này trong bình views.py tôiTruy cập danh sách python trong javascript như một mảng

def showpage(): 
     ... 
     test = [1,2,3,4,5,6] 
     return render_template("sample.html",test=test) 

Tôi có điều này trong mẫu của tôi .html

<script> var counts = {{test}}; </script> 

này mang lại cho tôi một số lượng rỗng biến. Làm thế nào tôi có thể nhận được số lượng giống như danh sách kiểm tra trong python?

+0

Bạn có thể hiển thị nguồn được hiển thị cùng với mẫu của mình không? – tbicr

+0

điều là nó không hiển thị. nếu tôi sử dụng giải pháp bên dưới, nó cho biết kết thúc đầu vào bất ngờ tại JSON.parse – knk

+0

Không có chuỗi rỗng nào hoặc ' 'hoặc cái gì khác? – tbicr

Trả lời

15
  1. Khi bạn chèn biến template {{ test }} Mất đại diện đối tượng. Đối với danh sách int [1,2,3,4,5,6], nó sẽ được hiển thị là [1, 2, 3, 4, 5, 6], vì vậy nó là mảng javascript hợp lệ, nhưng phương pháp này không an toàn đối tượng phức tạp mà không có đại diện giống như javascript, ví dụ, test = [1,2,3,4,5, bất kỳ] sẽ hiển thị là [1, 2, 3, 4, 5, &lt;built-in function any&gt;], tuy nhiên đây chỉ là ví dụ và sẽ không bao giờ hoạt động.

  2. Để ngầm đúc để javascript đối tượng trong bình tồn tại tojson lọc:

    <script> var counts = {{ test|tojson }}; </script> 
    

    Vì vậy, nếu đối tượng là JSON serializable, sau đó tất cả sẽ được trả lại, nếu không thì template engine sẽ nâng cao một ngoại lệ.

  3. Bạn cũng có thể gửi mã javascript để mẫu của bạn:

    from flask import json 
    return render_template("sample.html",test=json.dumps(test)) 
    

    nhưng nó không phải là một phương pháp tốt và nó sử dụng tốt hơn tojson lọc đó cũng là đánh dấu HTML an toàn.

  4. Tôi không thích trộn bất kỳ mã javascript nào trong các mẫu và các mẫu phân tách, dữ liệu javascript và javascript với ajax. Nếu phương pháp này khó thì tôi thích sử dụng bộ lọc tojson.

+4

Bộ lọc 'tojson' tạo ra phiên bản ** HTML an toàn ** của giá trị,' json.dumps() 'thì không. ** Luôn luôn ** sử dụng '| tojson' trong mẫu, không phải' json.dumps() ', khi tạo các giá trị JavaScript. –

4

Bạn sử dụng json.dumps trong chế độ xem bình và JSON.parse trong mã javascript.

Trong giao diện python:

def showpage(): 
    ... 
    test = [1,2,3,4,5,6] 
    test = json.dumps(test) 
    return render_template("sample.html",test=test) 

Trong đoạn mã JavaScript:

<script> var counts = JSON.parse("{{ test }}"); </script> 
+0

Điều này không hoạt động! và có vẻ như JSON.parse (test} có dấu ngoặc ôm không khớp? – knk

+0

phân tích cú pháp đang trả về không xác định trên biến, tôi có cần thêm một số bộ lọc ở đây không? – knk

+0

Có lỗi, nên là ' 'và nó không có ý nghĩa bởi vì ' 'sẽ có kết quả tương tự và ngắn hơn cho ví dụ này. Không có lý do nào khiến json hai lần. – tbicr

2

Bạn cũng có thể sử dụng

{{ test|safe }} 

hoặc

{{ test|tojson|safe }} 

Bộ lọc safe được sử dụng trong thẻ script.

Các vấn đề liên quan