如何修复“str"对象不是映射错误 [英] How to fix 'str' object is not a mapping error

查看:31
本文介绍了如何修复“str"对象不是映射错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我会开始说这不是一个重复的问题.我的问题与 Django 2.2 的 url 略有不同.

I will start saying its't a duplicated question. My problem is a little different in an url with Django 2.2.

当将 HttpResponseRedirect 返回到同一应用程序中的另一个视图时,视图触发str"对象不是映射错误.

An view triggers 'str' object is not a mapping error when return HttpResponseRedirect to another view in same application.

我真的不知道怎么了.我在同一个项目的其他应用程序中使用相同的方法并且它有效.

I really don't know what's wrong. I use same method in other application in same project and it works.

项目 urls.py

urlpatterns = [
    url(r'^$', Home.as_view()),
    path('dashboard/', include('dashboard.urls')),
    path('main/', include('main.urls'))
]

应用程序 urls.py

Application urls.py

urlpatterns = [
  path('', views.Section.as_view(), name='main-form')
]

应用程序视图.py

class Home(View):
  def get(self, request):
    return render(request, 'index.html', context={})

  def post(self, request):
    return HttpResponseRedirect(reverse('main-form'))


class Section(View):

  def get(self, request):
    return HttpResponse("Test Ok")

发布主页表单后,它应该重定向到主表单视图(截面视图类),但出现错误.

After post home form it should redirect to main-form view (Section view class) but I get error.

如果我在模板 url {% url 'main-form' %}

It triggers same error if I use the url in a template url {% url 'main-form' %}

如果我手动导航以从地址栏查看,视图呈现良好.

If I navigate manually to view from address bar, view renders fine.

怎么了?

推荐答案

你可能写过这样的 URL 模式:

You probably wrote a URL pattern like this:

path('register-sms/', GetPhoneNumberView.as_view(), 'register-sms'),

而不是这样:

path('register-sms/', GetPhoneNumberView.as_view(), name='register-sms'),

name 是一个关键字参数,如果省略它,该字符串将成为 kwargs 的值,并且会出现此错误.如果您知道要查找的内容,那么简单修复即可.

name is a keyword argument, if you leave it out, that string becomes the value for kwargs and you get this error. Simple fix if you know what to look for.

这篇关于如何修复“str"对象不是映射错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆