2014-11-04 15 views
5

Tek bir yol için ayarlanan yüklemelerle birden fazla @ view_config'sine sahip bir görünüm sınıfı yazdım. Daha sonra, alt işlevlerin bir çiftinin üzerine yazarak, görüntünün nasıl yapıldığını etkileyen alt sınıfa sahibim. Aşağıda benzer bir şey, ancak basitleştirilmiş kod ile.@view_defaults ve @view_config dekoratörler ile piramit görünümü sınıfı devralma

Güzergahı ziyaret ettiğinizde, her şey yolunda gider. View_b yolunu ziyaret ederken, "404 Bulunamadı Kaynak bulunamadı" ifadesini gösterir.

Görünüşe göre @view_configs 'devralınmamış' ve yeni @view_default ile bağlantılı değil. Bunu düzeltmenin basit bir yolu var mı, yoksa config.add_view()'u manuel olarak değiştirmek zorunda mıyım?

@view_defaults(route_name='view_a', renderer='templates/views.mak') 
class View_A(object): 

    def message(self): 
     return 'This is view a' 

    @view_config(request_method='GET') 
    def get(self): 
     return {'message': self.message()} 

@view_defaults(route_name='view_b') 
class View_B(View_A): 

    def message(self): 
     return 'This is view b' 

cevap

7

@view_config bir venusian dekoratör değil, kesinlikle geleneksel dekoratör olduğunu. .scan()'a kadar hiçbir şey geçerli olmayacaktır.

Bu, aynı zamanda kalıtsal olmadıkları anlamına da gelir; ancak venusian, tam olarak istediğiniz gibi yapacak lift() adlı bir sınıf dekoratör sağlar. Bu noktada

from venusian import lift 

@view_defaults(route_name='view_a', renderer='templates/views.mak') 
class View_A(object): 

    def message(self): 
     return 'This is view a' 

    @view_config(request_method='GET') 
    def get(self): 
     return {'message': self.message()} 

@view_defaults(route_name='view_b') 
@lift() 
class View_B(View_A): 

    def message(self): 
     return 'This is view b' 

tüm kalıtsal işlevlerini doğru @view_config uygulanır sahip olacaktır:

venusianAPI dokümantasyon aşağıdaki gibi bir şey sizin kullanım durumu için çalışması gerektiğini gösterir. Şimdi .scan() çalıştırdıktan sonra uygulamanız beklendiği gibi davranacaktır.


@view_defaults miras ileride değişebileceğini, not yapın: https://github.com/Pylons/pyramid/issues/1382.

Bu, oluşturucunun süper sınıftan taşınmasını bekleyip beklemediğinize bağlı olarak, görünümlerinizi listelendiği gibi değiştirebilir veya değiştirmeyebilir.

+0

Bu nasıl daha fazla oyu yok. En azından bir tane daha var :) –