【问题标题】:In Django views how can I itirate form fields在 Django 视图中,我如何迭代表单字段
【发布时间】:2014-02-25 19:59:55
【问题描述】:

在 Django 视图中,我可以遍历表单发布的文件

def stack_register(request):
"""
"""

print(request)
print('type request: ', type(request))


if request.method == 'POST':

    for key in request.FILES.keys():
        print('key: ' + key)


return HttpResponse('received')

我怎样才能对其他表单域做同样的事情?

【问题讨论】:

  • 我重新阅读了它,文档说可以通过 request.POST 获取 Querydict 对象并使用 items() 函数获取密钥。我试过这个,但在尝试打印它时遇到了异常。由于它是一个元组,因此提取值也很棘手。至于必须阅读每个小细节的特殊文档,这是 python 和 django 的一个不那么令人愉快的时间和精力消耗特性,所谓的类型冷漠只是一个骗局
  • 所以您认为其他人投入“不愉快”的时间和精力来教育自己,只是为了让您不必这样做?学习确实需要时间和精力;是否“不愉快”主要取决于学习者。学习如何学习事物似乎更加困难。
  • 不,我相信像我一样经常分享信息是本网站的目标,如果您不想回答,请到其他地方使用快捷方式。
  • 不,这个网站的目的是让人们互相帮助解决他们无法解决的编程问题。不想自己阅读文档既不是编程问题,也不是您无法解决的问题,当然也不是我们可以帮助您解决的问题。

标签: python django


【解决方案1】:

可以通过在请求中打印元组来获取字段信息,但据我所知,获取值需要实际读取它们或事先了解键。

这就是我得到它的方式:

def stack_register(request):
"""
"""

print(request)
print('type request: ', type(request))


if request.method == 'POST':

    print('')

    for key in request.FILES.keys():
        print('key: ' + key)
        print('file_name: ' + str(request.FILES[key]))


    print('type', type(request.POST.items()))


    for tuple in request.POST.items():  #this was the probelmatic code
        print('tuple: ' + str(tuple))

    #keep syntax for list
    #library = request.POST.getlist('library')
    #print('library: ', library)

    library = request.POST.__getitem__('library')
    print('library: ', library)

    stack = request.POST.__getitem__('stack')
    print('stack: ', stack)

    time = request.POST.__getitem__('time')
    print('time: ', time)

    medium = request.POST.__getitem__('medium')
    print('medium: ', medium)

    comments = request.POST.__getitem__('comments')
    print('comments: ', comments)

    storage = request.POST.__getitem__('storage')
    print('storage: ', storage)   


return HttpResponse('received')

在我的书中,这比学习 Django 表单的狡猾方法和冗长乏味的文档要容易得多,并且提供更多的动手控制。

顺便说一句,对于所有文档爱好者,我认为最好的代码文档是编写良好的简单清晰的代码。

【讨论】:

  • 你为什么要使用items()?这在这里没有任何意义,并且不会给你密钥,而是一个(key, value) 元组的列表。正如我在对该问题的评论中所说,只需执行for key in request.POST:,就应该遍历所有键。此外,您不应该使用__getitem__,只需使用request.POST['time'] 或泛化mydict[key]。请阅读docs.python.org/2/tutorial/datastructures.html#dictionaries,因为您似乎对如何使用字典感到非常困惑。
  • request.POST.keys() 返回POST QueryDict 中的键,与request.FILES.keys() 完全相同。根本不需要密钥的先验知识。
  • 您在元组备注上是正确的,但是在遍历 POST 键时,我没有获得信息,也没有找到键,因此打印元组给了我可读的信息。
  • 看来我已经侵入了 lanzz 的私人领地。看起来他的目标是用代码、python、django 和世界的方式来教育我。耻辱这位学者和明智的教育家他的事实是错误的。 request.POST.keys() 不会产生字段键,而 lanzz 不会产生而是蔑视
  • @RubberDuck 除了 lanzz 是正确的事实之外,您可能还想重新考虑侮辱您希望帮助您的人
猜你喜欢
  • 2011-12-20
  • 2015-11-03
  • 1970-01-01
  • 2020-07-26
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-06-10
  • 2013-10-08
相关资源
最近更新 更多