2011-12-01 31 views
6

"TemplateAssertionError:" image_number ' adında bir filtre yok "hatası, filtreleri güncelleştirerek şablon ortamına özel bir filtre kaydetmeye çalışırken hata alıyorum çevreye karşı dict. aşağıdaki gibi benim modüldejinja2 Özel filtre "TemplateAssertionError: 'format_number' adında bir filtre yok"

, ben çevre modülü ithal var: Filtreyi uygulamak için çalıştı benim html şablon dosyası içinde

class DashboardHandler(SecurePageHandler): 

    def format_number(number): 
     s = '%d' % number 
     groups = [] 
     while s and s[-1].isdigit(): 
      groups.append(s[-3:]) 
      s = s[:-3] 
     return s + ','.join(reversed(groups)) 

    def do_get(self): 
      # ... snip ... 
      env = environment.Environment(self) 
      env.filters['format_number'] = self.format_number 
      # ... snip ... 

: Benim sınıfımda

from jinja2 import environment 

Ben aşağıdaki yöntemi tanımlanmış aşağıdaki gibi olabilir:

{{top_five_url .total|format_number}} 

Bu nasıl oluyor?

Güncelleme

varsayılan bir ortam örneği var mı, biz kullanmalıyım? modül içinde

takip olarak

import jinja2 

def format_number(number): 
    s = '%d' % number 
    groups = [] 
    while s and s[-1].isdigit(): 
     groups.append(s[-3:]) 
     s = s[:-3] 
    return s + ','.join(reversed(groups)) 

jinja2.filters.FILTERS['format_number'] = format_number 

cevap

7

benim sorunu çözmek olabilir:

aşağıdaki gibi filtreler küresel sözlüğe benim yöntemi tanımlanan modül içinde

Çözülmüş ve güncellenmiş , Yöntemimi tanımladım ve filtreler sözlüğünü genel olarak şu şekilde güncelleştirdim:

import jinja2 

def format_number(number): 
    s = '%d' % number 
    groups = [] 
    while s and s[-1].isdigit(): 
     groups.append(s[-3:]) 
     s = s[:-3] 
    return s + ','.join(reversed(groups)) 

jinja2.filters.FILTERS['format_number'] = format_number