2012-05-12 5 views
1

を「行方不明」「不足していることは」動的にする必要があるため、私は、ビューに命令的スキーマを定義する必要があります。の定義を動的colander.SchemaNodeため

# ... 
    now = datetime.datetime.utcnow() 
    delta = datetime.timedelta(days=range) 

    schema = SchemaNode(Mapping()) 
    schema.add(SchemaNode(Date(), name='to', missing=now)) 
    schema.add(SchemaNode(Date(), name='from', missing=now - delta)) 
    # ... 

これは醜いです。カスタムタイプを定義する以外にも良い方法がありますか?

答えて

5

schema bindingを使用してください。

@colander.deferred 
def deferred_now(node, kw): 
    now = kw['now'] 
    return now 

@colander.deferred 
def deferred_now_delta(node, kw): 
    return kw['now'] - kw['delta'] 

class MySchema(MappingSchema): 
    to = SchemaNode(Date(), missing=deferred_now) 
    frm = SchemaNode(Date(), missing=deferred_now_delta) 

def aview(request): 
    schema = MySchema().bind(now=now(), delta=somedelta) 
+0

ドキュメントによると、[1] 1は、( 'colander.deferredをレンダリングしようとしているdefaultをあまりにも属性が、まだピラミッドは、これらの例で繰延機能を秋に失敗し、レンダリングエラーの原因のバインディングスキーマを使用することができます'オブジェクト)。 'missing'の代わりに' default'のためにあなたの答えを微調整するには? [1] http://docs.pylonsproject.org/projects/colander/en/latest/binding.html – hamx0r

関連する問題