django - 如何清理url传递的变量数据?

时间:2011-09-26 17:02:23

标签: django django-forms django-views django-urls

当我使用表单时,我使用Django表单清理字段数据,但是如何清理URL传递的可变数据?

例如,我有一个这样的网址: http://mywebsite.com/tags/my-tag/ 其中 my-tag 是我的变量m传递给我的views.py上的函数。

我尝试使用Django表单来清理数据,但我收到的错误是“'TagForm'对象没有属性'cleaning_data'”。 我知道 my-form 变量已经到达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()

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您正在创建一个带有请求对象的TagForm,但您没有在我能看到的任何地方为TagForm提供值my-tag

网址的/my-tag/部分不是请求参数。它是url的一部分,可能会以my-tag的形式传递给视图函数(您可能希望将其重命名为my_tag以更加Pythonic)。

修改

您可以简单地创建一个dict对象来初始化为Form对象而不是request.GET。 An example is here

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

tagform = TagForm(data)

基本上,用于填充表单对象的字典必须包含表单字段名称到您希望将其设置为的值的映射。

在这种情况下,您的表单字段名称为“tag”,并希望将其设置为my-tag(您确定在变量名称中使用短划线时没有出现语法错误吗?我这样做...)。我已经纠正了我的例子。

答案 1 :(得分:2)

在表单上调用cleaned_data方法后,会显示is_valid字典属性。

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})