2012-08-16 19 views
3

我在瀏覽器視圖的上下文中。我想在頁面內呈現一個表單。我該如何渲染autoform中的表單?

class CommandeView(BrowserView): 
    ... 
    def render_myform(self): 
     livraison_form = LivraisonForm(self.context, self.request) 
     livraison_form.update() 
     return livraison_form.render() 

class ILivraisonForm(interface.Interface): 
    livraison = schema.Choice(title=_(u"Mode de livraison"), 
          vocabulary=livraison_vocabulary) 


class LivraisonForm(AutoExtensibleForm, form.EditForm): 
    schema = ILivraisonForm 

class LivraisonFormAdapter(object): 
    component.adapts(ICommande) 
    interface.implements(ILivraisonForm) 
    def __init__(self, context): 
     self.context = context 
     self.livraison = self.context.livraison 

我想render_myform只呈現表單,但它返回一個HTML Plone頁面。

歡迎任何提示。

+0

你用FormWrapper試過了嗎?我不確定它是否適用於瀏覽器視圖 – Jihaisse 2012-08-17 10:10:26

+0

formwrapper將創建一個頁面來顯示錶單。我想相反:在現有頁面內顯示錶單。 – toutpt 2012-08-17 12:00:31

回答

2

尚未對此進行深入檢查,但表格可能是由plone FormWrapper類包裝的。

尋找對LivraisonForm實例.form屬性:

def render_myform(self): 
    livraison_form = LivraisonForm(self.context, self.request).form 
    livraison_form.update() 
    return livraison_form.render() 

可能是你需要額外的接口添加到請求這個工作(包裝一般不會這樣對你我。 「現在M於時間有點低,所以你得到這個未經測試:

from plone.z3cform import z2 

class CommandeView(BrowserView): 
    def render_myform(self): 
     z2.switch_on(self) # Apply layer interface, set up locale, add `getURL` method 
     livraison_form = LivraisonForm(self.context, self.request).form 
     livraison_form.update() 
     return livraison_form.render() 

Plone的知識庫使用同一設置到show a form in a viewlet

相關問題