2011-02-25 19 views
26

dahil olmak üzere Jinja2'den belirsiz bıyıklardan kaçınmaşablonlarını Jinja2 şablonlarına eklemek istiyorum. Ne yazık ki, her ikisi de (varsayılan kurulumda) sırasıyla ifadeleri ve harfleri belirtmek için {{ & }} bıçağını kullanır.jQuery şablonları

böyle, script etiketleri ile HTML içine benim jQuery şablonları takacağım: Jinja bir hazır olarak each yorumlamaya çalışır çünkü

<script type='text/x-jquery-template'> 
    <div>The people are: 
     {{ each people }} 
      ${$value} 
     {{ /each }} 
    </div> 
</script> 

üstünde bir Jinja şablonunda ise, ancak, ana kirişler. Bu koşullar altında (çok sayıda şablona sahibiz), Jinja2'nin başlangıç ​​ve bitiş sınırlayıcılarını değişkenler için değiştirmek pratik değildir. Ayrıca kafa karıştırıcı, birlikte çalışabilirliği azaltır ve ekstra eğitim gerektirir. Bu seçeneğin önlenmesi tercih edilir.

Yani bu çözmek için ben düşündüm iki alternatif şeyler şunlardır: kaçan

  1. jinja2 her '{{' ve '}}', en iyi nasıl yapılacağı tam emin değilim hangi ("{{ "{{"}}` belki, ama bu ayrıntılı var);

  2. Daha pratik - belki idealdir - belki bir jQuery uzantısı üzerinden, kod bloğu ayrıştırmak değil için jinja2 söylüyorum olacaktır.

Düşünceler ve geribildirim için minnettar olurdum. Okuduğunuz için teşekkürler.

+3

Bende, belirsiz bir bıyık var! Bana tıraş zamanı geldiğini hatırlatıyor. :) –

cevap

51

Kaçış nedenlerinizi rahatlatmak için {% raw %}{% endraw %} yapısını kullanabilirsiniz (doğrudan Jinja2 docs'dan).

Örnek: polimer ile deney ancak önerilen çözüm gibi vermedi

<script type='text/x-jquery-template'> 
    <div>The people are: 
     {% raw %}<!-- Everything in here will be left untouched by Jinja2 --> 

     {{ each people }} 
      ${$value} 
     {{ /each }} 

     {% endraw %} 
    </div> 
</script> 
+4

Kaçmak ve kaçış blokları güzel olsa da, en iyi yolun sunucu sınırlayıcılarının sunucuya özel olduğundan ve istemci sınırlayıcılarının istemciye özel olduğundan emin olmak için sonuca varıyorum. kaçmak gerekli. Bu, kendi özelleştirilmiş sınırlayıcılarınızı kullanmak için sunucu şablonu altyapısını yapılandırarak yapılabilir. Bu, bir sorun olmaktan kaçmadan sunucu ve istemci tarafı templasyon seçme özgürlüğü sağlar. Ek olarak, BOTH motorlarının JavaScript veya diğer istemci tarafı kodlarıyla çakışmamasına dikkat edilmelidir. – iJames

+0

İhtiyacım olup olmayacağını bilmiyorum, ancak Handlebars şablonumun içinde Jinja2 özelliklerini kullanma özgürlüğüne sahip olmak isterim. Aksine, sunucu ve istemci üzerinde aynı dili kullanabilmek için sunucuya varsayılan dili kullanabilmem ve bunun ardından istemciyi güncellemek için aynı şablonları kullanabilmem için bunun tersi de geçerlidir. –

3

google ile bulduk, bu nedenle başka bir alternatif: filtreleri kullanın.

#Filter to create curly braces 
@app.template_filter('curly') 
def curly(value): 
    #Handle value as string {{'foo'|curly}} 
    if(isinstance(value,str)): 
     return_value = value 
    #Handle value directly. {{foo|curly}} 
    else: 
     return_value = value._undefined_name 
    return "{{" + return_value + "}}" 

Sonra şablonunda Eğer {{'foo'|curly}} veya {{foo|curly}}

PS kullanabilirsiniz:: En piton kodunda

bir filtre tanımlamak sen şişeyi kullanmak istemiyorsanız ben kullanamıyorum düşünüyorum dekoratör ancak filtreyi açıkça yerine kaydetmek zorunda: environment.filters['curly'] = curly.

+0

Bu akşam bu problemin çeşitli çözümlerini inceledim ve sizinki de en zarif olanıdır ve Jasmine ve Karma ile Birim Testi için iyi bir şekilde oynamanın büyük yararı vardır. Teşekkür ederim!! –