簡體   English   中英

FormEncode驗證失敗后重新呈現帶有querystring參數的Pylons表單

[英]Rerendering a Pylons form with a querystring parameter after FormEncode validation fails

我的問題可能與此相同,但是建議的答案似乎沒有幫助(或者我無法正確理解): Pylons FormEncode @validate裝飾器將參數傳遞給重新渲染操作

我有一個簡單的表單,該表單接受必需的querystring(id)值,將其用作隱藏的表單字段值,並驗證發布的數據。 控制器如下所示:

class NewNodeForm(formencode.Schema):
  parent_id = formencode.validators.Int(not_empty = True)
  child_name = formencode.validators.String(not_empty = True)

def newnode(self, id):
  c.parent_id = id
  return render('newnode.html')

@validate(schema=NewNodeForm(), form='newnode')
def createnode(self):
  parentId = self.form_result.get('parent_id')
  childName = self.form_result.get('child_name')
  nodeId = save_the_data(parentId, childName)
  return redirect_to(controller = 'node', action = 'view', id = nodeId)

表格非常基本:

<form method="post" action="/node/createnode">
  <input type="text" name="child_name">
  <input type="hidden" value="${c.parent_id}" name="parent_id">
  <input name="submit" type="submit" value="Submit">
</form>

如果驗證通過,則一切正常,但如果驗證失敗,則由於沒有傳回id ,因此無法調用newnode 它拋出TypeError: newnode() takes exactly 2 arguments (1 given) 簡單地將其定義為newnode(self, id = None)可以解決問題,但是我不能這樣做,因為邏輯需要id。

這似乎很簡單,但是我想念什么呢?

如果在newnode中使用id arg,則我希望在其相關的createnode函數中使用相同的arg。 修改您的發布網址以使用ID,並且您無需隱藏parent_id,因為它現在已成為網址的一部分。

<form method="post" action="/node/createnode/${request.urlvars['id']}">
  <input type="text" name="child_name">
  <input name="submit" type="submit" value="Submit">
</form>

驗證失敗時, validate裝飾器將使用修改后的request對象調用newnode ,但不得更改所有GET / POST參數

def newnode(self, id=None):
  c.parent_id = id or request.params.get('parent_id')
  return render('newnode.html')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM