2011-02-23 15 views
5

Django dokümantasyonuna göre filtremi kaydettim:Google App Engine şablon sisteminde özel filtreyi nasıl kaydederim?

from google.appengine.ext.webapp import template 
# ... 
register = template.create_template_register() 
@register.filter(name='wld') 
def wld(result): 
    if result == 1 : return "win" 
    if result == 0 : return "loss" 
    if result == 0.5 : return "draw" 
    return "unknown" 
self.response.out.write(template.render("player.html", template_values)) 

şablonda bir yerde kodum var:
{{result|wld}}

ve şablonumu oluşturmaya çalıştığımda şu hatayı alıyorum: TemplateSyntaxError: Invalid filter: 'wld'

Neyi yanlış yapıyorum?

cevap

12

, Django şablon motoru ile kaydetmek gerekir: Çağrı template.register_template_library AppEngine SDK bir parçası olarak sağlanan bir sarıcı

from google.appengine.ext.webapp import template 
template.register_template_library('path.to.lib') 

Not söyledi. Bunu main.py ürününüze koyduğunuzda, yeni etiketler veya filtreler daha fazla çalışma yapmadan tüm şablonlarınızda mevcut olmalıdır. {% load %} etiketini kullanmaya gerek yok.

Önemli bir not: register_template_library'un çalışması, AppEngine uygulamanızda hangi Django sürümünü kullandığınıza bağlı olarak değişir. 0.96 kullanıyorsanız, parametre özel etiket kitaplığı dosyasının yolu olacaktır. Django 1.2 kullanıyorsanız, özel etiket kitaplığına bir python modülü yolu ile olacaktır. Bu işi in a post on my blog yapmak için talimatlar gönderdim.

+1

Teşekkürler! Bir keresinde 'tag'leri oluşturduktan sonra boş '__init __. Py' ve' mytags.py', filtre kayıtlarını içeren ve 'template.register_template_library (' tags.mytags ')' adında main.py'den, her şey iyi çalıştı! – rmflow

+0

Mükemmel. Bunu duyduğuma çok sevindim. –

+1

'{% load%}' etiketini kullanmanız gerekmiyor, benim için bir saat süren aramanın anahtarıydı! Önemli not kısmı için –

0

Bu filtreyi kullanmayı planladığınız her şablona {% load the_name_of_that_module %} bloğunu eklemeniz gerekir. Eğer özel etiket kitaplığı oluşturduktan sonra

+0

Açıkçası bir şey kaçırmıyorum, sadece main.py betiğim ve player.html şablonum var. Yukarıdaki kod main.py'de yürütülür. 'Load' etiketi nasıl görünmeli? – rmflow

+0

GAE, Django şablon sistemini varsayılan olarak kullanır ve böylece [aynı kurallar] 'ı takip eder (http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/). Temel olarak 'load' etiketi yerleşik bir etikettir, ancak özel filtrelerinizi/etiketlerinizi proje paketinizde belirli bir yere koymanız gerekir. Bu dokümanı okumanızı şiddetle tavsiye ederim, çünkü bu konunun tamamını açıklıyor. –