2011-09-26 61 views
2

當我使用表單時,我使用Django表單清理字段數據,但是如何清除由URL傳遞的變量數據?django - 我如何清理通過url傳遞的變量數據?

比如我有一個這樣的URL:http://mywebsite.com/tags/my-tag/其中我的標籤是我要傳遞給一個函數在我的觀點中的變量。 PY。

我試圖使用Django表單來清理數據,但是我收到錯誤說「'TagForm'對象沒有屬性'cleaned_data'」。 我知道我的表格變量是達到標籤函數在views.py因爲我能夠顯示其內容在模板上,所以問題可能與我使用的形式。

views.py

def tags(request, my-tag): 
    tagform = TagForm(request.GET) 
    cleaned_dt = tagform.cleaned_data 
    form_tag = cleaned_dt['tag'] 

forms.py

class TagForm(forms.Form): 
    tag = forms.CharField() 

任何想法?

+0

實際上我需要的是一種清理從URL傳遞的變量數據的方法。如果有其他解決方案,您可以忽略我的示例。 – avatar

回答

2

在窗體上調用is_valid方法後,將出現cleaned_data字典屬性。

def tags(request, my-tag): 
    tagform = TagForm(request.GET) 
    if tagform.is_valid(): 
     cleaned_dt = tagform.cleaned_data 
     form_tag = cleaned_dt['tag'] 
    return render(request, "may_template.html", {"form":tagform}) 
+0

添加如果tagform。is_valid():解決了「TagForm」對象沒有屬性「cleared_data」的錯誤。現在我仍然需要弄清楚如何清理從url傳遞的變量。 – avatar

2

您正在創建一個帶有請求對象的TagForm,但是您不會將TagForm的值設置爲my-tag,我可以在任何地方看到它。

URL的/my-tag/部分不是請求參數。它是網址的一部分,並且可能傳遞到視圖函數my-tag(您可能希望將其重命名爲my_tag以使其更爲Pythonic)。

編輯

您可以簡單的創建一個字典對象初始化到表單對象,而不是request.GET中。 An example is here

data = {'tag': my_tag, 
    'anotherIfNecessary': 'Hi there'} 

tagform = TagForm(data) 

基本上,使用的字典來填充表單對象必須包含表單字段名稱映射到您想在設定它的價值。在這種情況下,你有一個表單字段名稱爲「標籤」,並希望將其設置爲my-tag(你確定你沒有在變量名稱中使用破折號的語法錯誤嗎?我確實... )。我糾正了我的例子。

+0

我想你沒有把my-tag變量傳遞給表單。現在的問題是如何將它傳遞給表單? – avatar

+0

@avatar,看我的編輯。希望能幫助到你。 –

+0

Evan,我嘗試了你的代碼,並在form下面添加了form_tag = cleaned_dt ['my_tag'],就像我使用常規窗體一樣,但沒有任何內容傳遞給「form_tag」變量。 爲了測試我在模板上添加了{{form_tag}},並且沒有顯示任何內容。 – avatar