2011-09-26 115 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