2012-09-12 25 views
9

beklendiği gibi çalışmıyorBenim django şablon boolean değişken javascript İşte

<script> 
     var auth_status = "{{ user.is_authenticated }}" 
    </script> 

    {% block scripts %} {% endblock %} 

sitemde içinde komut geri kalanı blok komut vardır benim base.html başlığındaki kodudur. (Komut dosyası bloğunda içinde ve komut dosyası etiketleri içinde) Bu kodu vardır bir çocuk şablonunda

,
  if (auth_status) { 
      //something 
     } 

o olmalıdır ve kapalı olduğunu bağlı zaman el altında hata, auth_status daima doğru olduğu kullanıcı giriş yaptı. Request_context şablona iletiliyor, böylece hata olmamalı.

teşekkürler Ben senin auth_status değişken bir dize değil, bir boolean gibi görünüyor gördükleri için

+2

Sorunuza Sightly ilgisiz, ama (user_is_authenticated) {şeyler yaparsanız 'yapmaktan daha farkında olmak; Bu JS değişkeninin değerine güveniyorsanız, '' bir güvenlik sorunu olabilir. Bir kullanıcı, yürütmeden önce JS değişkeninin değerini değiştirebilir. –

+0

Yani bir kullanıcı bir şekilde auth_status = true ayarlayabilir mi? Yani js atlamak geçerli bir geçici çözüm olabilir mi? Örn: eğer ({{user.is_authenticated | yesno: "true, false"}}) versus (auth_status)? –

+1

Kötü niyetli bir kullanıcı, sayfanızın kaynak kodunu alabilir ve istedikleri her şeyi değiştirebilir. ** ** herhangi bir ** güvenlik istemci tarafı ** uygulayabileceğiniz ** bir ** yolu yoktur ve ** hiçbir geçici çözüm **, tüm güvenlik/erişim denetimi sunucu tarafı (Python kodunuzdadır. JS, dinamik olarak yürütülen uygulama kodunuzun bir uzantısı değildir, farklı kısıtlamalarla * farklı bir şeydir. –

cevap

52

. Javascript'te boş olmayan bir dize olan bir değişken if maddesinde true olarak değerlendirilecektir.

<script> 
    var auth_status = True; 
</script> 

Python'un Gerçek boolean Büyük harfli olduğu gibi: bu HTML üretecektir çünkü

neyse,

<script> 
    var auth_status = {{ user.is_authenticated }}; 
</script> 

gibi bir şey çalışmayacak.

Bu Javascript Python çeviriye yapmalıdır: Burada

<script> 
    var auth_status = {{ user.is_authenticated|yesno:"true,false" }}; 
</script> 

Kontrol yesno docs: https://docs.djangoproject.com/en/dev/ref/templates/builtins/#yesno

+1

+1 İyi bir cevap ve iyi bir şekilde 'yesno'. –

+0

Vay! Çok teşekkürler, iki dilde büyük/küçük harf farkını tamamen gözden kaçırdım! –

+0

Python'u geçmek için daha genel bir çözüm JS varslarına kadar değişir json kullanmaktır. Py: context ['foo'] = json.dumps (a_py_list). Şablonda . Bu, çoğu veri yapısı ve boole için de çalışacaktır. – Sean

İlgili konular