【问题标题】:How to fix 'str' object is not a mapping error如何修复“str”对象不是映射错误
【发布时间】:2019-04-24 23:04:29
【问题描述】:

我会开始说这不是一个重复的问题。我的问题在 Django 2.2 的 url 中有点不同。

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

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

项目 urls.py

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

应用程序 urls.py

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

应用程序views.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")

发布主页表单后,它应该重定向到主表单视图(部分视图类)但我收到错误。

如果我在模板 url {% url 'main-form' %} 中使用 url 会触发相同的错误

如果我手动导航以从地址栏查看,则视图呈现正常。

怎么了?

【问题讨论】:

    标签: django django-views django-urls


    【解决方案1】:

    您可能编写了这样的 URL 模式:

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

    而不是这样:

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

    name 是一个关键字参数,如果你忽略它,该字符串将成为kwargs 的值,你会得到这个错误。如果您知道要查找的内容,则可以轻松解决。

    【讨论】:

      【解决方案2】:

      尝试为您的 django 应用 urls.py 文件添加一个应用名称,例如

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

      然后在你的模板视图文件中包含:href={% url 'smth:main-form' %}

      【讨论】:

      • 非常感谢@Okayjosh 我不知道为什么,但是我重新制作了这个项目并且它可以工作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 2019-05-30
      • 1970-01-01
      • 2015-02-15
      • 1970-01-01
      相关资源
      最近更新 更多