2010-09-18 13 views
0

I ont le contrôleur suivant:Comment valider le formulaire dans pylons dans la même action de contrôleur qui l'a initialement rendu?

class FormtestController(BaseController): 

    def form(self): 
     return ender('/simpleform.html') 

    @validate(schema=EmailForm(state=c), form='form', post_only=False, on_get=True, 
       auto_error_formatter=custom_formatter) 
    def submit(self): 
     return 'Your email is: %s and the date selected was %r.' % (
      self.form_result['email'], 
      self.form_result['date'], 
     ) 

La première action est de la forme initiale de rendu et le second est lorsque le formulaire est soumis. Est-il possible de les fusionner et simplement utiliser un if request.POST == 'POST' pour vérifier si le formulaire a été soumis?

Je l'ai essayé et déplacer le décorateur @validate à l'action de la forme, mais il me donne un WSOD et le serveur cesse de service:

class FormtestController(BaseController): 

    @validate(schema=EmailForm(state=c), form='form', post_only=False, on_get=True, 
       auto_error_formatter=custom_formatter) 
    def form(self): 
     if request.method == 'POST': 
      return 'Your email is: %s and the date selected was %r.' % (
       self.form_result['email'], 
       self.form_result['date'], 
      ) 
     return render('/simpleform.html') 

Est-il possible d'avoir une seule action et toujours utiliser la validate décorateur?

Répondre

1

Silly, c'était simplement simple. Voici mon code:

class FormtestController(BaseController): 

@validate(schema=EmailForm(state=c), form='form', post_only=True, 
      on_get=False, 
      auto_error_formatter=custom_formatter) 
def form(self): 
    if request.method == 'POST': 
     return 'Your email is: %s and the date selected was %r.' % (
      self.form_result['email'], 
      self.form_result['date'], 
     ) 
    return render('/simpleform.html')