2012-10-09 15 views
20

Jinja2'ye yeni geldim ve şu ana kadar istediklerimi gerçekleştirdim. Ancak, normal ifadeleri kullanmam gerekiyor ve the documentation veya Googles'te herhangi bir yerde bir şey bulamıyorum.Jinja2'deki normal ifadeleri nasıl kullanırım?

JavaScript in bu davranışını taklit eden bir makro oluşturmak istiyorum: Bir dizede karakterleri kaldırın ve daha sonra boşlukların yerine alt çizgi olacaktır

function myFunc(str) { 
    return str.replace(/someregexhere/, '').replace(' ', '_'); 
} 

. Bunu Jinja2 ile nasıl yapabilirim?

cevap

26

aslında yok normal bir ifade gerekirse kullanabilirsiniz replace denilen mevcut bir filtre vardır. Aksi takdirde, custom filter kayıt olabilirsiniz:

{# Replace method #} 
{{my_str|replace("some text", "")|replace(" ", "_")}} 

 

# Custom filter method 
def regex_replace(s, find, replace): 
    """A non-optimal implementation of a regex filter""" 
    return re.sub(find, replace, s) 

jinja_environment.filters['regex_replace'] = regex_replace 
+7

evet bu i maalesef gidiş sona erdi yoludur. jinja2 – Jason

+1

hey içinde regex kullanamazsınız aptal, dostum! Optimal olmayan bir uygulama olduğunu söylüyorsunuz, en uygun olana benzeyecek misiniz? – elias

+2

@elias - 'find', her defasında kullanıldığında derlenmiştir, çünkü bu büyük bir döngüde bir filtre olarak kullanılmışsa, potansiyel olarak * bir darboğaz olabilir. Durum böyle olsaydı, filtreye ('cache') bir anahtar kelime argümanı ekleyebilir ve' cache' 'True' olarak ayarlandığında' find' derler ve saklayabilir ya da sadece '' find'' derleyebilmeniz ve önbelleğe alabildiniz. argümanlar ve uygulamanızı en iyi şekilde sunan bir ejeksiyon stratejisi seçin. –