2011-12-30 14 views
17

Bu soru açık olmalı ama anlayamıyorum.İçerik değişkenlerimi Django'daki bir javascript dosyasına nasıl aktarabilirim?

Bir şablonda, ortam dizinindeki bir js dosyasına bağlantı veriyorum. Bu dosyadan, {{my_chart}} gibi bir içerik değişkenine erişmek istiyorum.

Ancak sözdizimi farklı mı? Teşekkür ederim!!

+0

Olası yinelenen bir [Django Şablon Değişkenler ve Javascript ] (http://stackoverflow.com/questions/298772/django-template-variables-and-javascript) – Cory

cevap

16

Bu şekilde mümkün olduğunu sanmıyorum. Görünüm tarafından sağlanan bazı verilere erişmek istiyorsanız, bunu js işlevine iletmeniz gerekir.

Örnek

js dosyası:

my_cool_js_function(some_param){ 
    // do some cool stuff 
} 

görünümü bu yardımcı olur :)

+0

[{{value | escapejs}}] 'a göz atmayı unutmayın (https://docs.djangoproject.com/tr/dev/ref/templates/builtins/# escapejs) – danihp

15

Andrzej Bobak cevabı ek olarak, aynı zamanda küresel bir değişkeni üretebilir

// some html code 

my_cool_js_function({{param}}) 

umut Şablonunuzdaki Javascript'te. Örneğin, şablon böyle bir kod oluşturabilir:

<script> 
    var my_chart = {{ the_chart }}; 
</script> 

Senaryonuz sonra my_chart başvurabilecekler.

+0

@Brian_Neal bu nasıl çalışır? I.e., javascript dosyasında 'console.log (my_chart);' gibi bir şey yapabilirsiniz ve herhangi bir yerde bildirmek zorunda değilsiniz? – YPCrumble

+0

@YPCrumble Django tarafından oluşturulan html'de bildirilmiştir. Aynı html dosyası harici bir javascript dosyası içeriyorsa, bu javascript bu değişkene başvurabilir. –

+1

Bu, js dosyanızı içe aktarmadan önce global değişkeni bildirdiğiniz sürece mükemmel bir yanıttır, iyi olmalısınız. Teşekkürler. –

3
Ben piton değişken bir nesne olup olmadığını tırnak içine koyun sürece sizin şablonu içinde, başka bir deyişle, bir yazım hatası atar bu yanılgıya birkaç kez koştum çünkü ben de eklersiniz

,

<script> 
    var my_var = '{{ python_object|escapejs }}'; 
</script> 

Ayrıca, bu nesneyi bağlama koymadan önce, JSON'a serileştirmek en iyisidir, yoksa dizge ayrıştırması yapmak zorunda kalmazsınız. Ayrıca bu adımdan önce dizelere dönüştürülmesi gereken tarih nesneleri buldum.

import jsonpickle 

context['python_object'] = jsonpickle.encode(python_object) 

Ve nihayet, JS sonra yaparak muhtemelen python olurdu olarak düzgün nesne yineleme ve değerleri kullanabilirsiniz:

var my_var_parsed = jQuery.parseJSON(my_var); 
İlgili konular