如何修复“str”对象不是映射错误

cri*_*iam 8 django django-urls django-views

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

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

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

项目网址.py

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

应用程序 url.py

urlpatterns = [
  path('', views.Section.as_view(), name='main-form')
]
Run Code Online (Sandbox Code Playgroud)

应用程序视图.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")
Run Code Online (Sandbox Code Playgroud)

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

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

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

怎么了?

boa*_*der 17

您可能编写了如下 URL 模式:

path('register-sms/', GetPhoneNumberView.as_view(), 'register-sms'),
Run Code Online (Sandbox Code Playgroud)

而不是像这样:

path('register-sms/', GetPhoneNumberView.as_view(), name='register-sms'),
Run Code Online (Sandbox Code Playgroud)

name是一个关键字参数,如果您将其省略,该字符串将成为 的值kwargs,并且您会收到此错误。如果您知道要查找什么,则修复很简单。


小智 3

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

app_name ='smth'

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

Run Code Online (Sandbox Code Playgroud)

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