Как исправить, что объект ‘str’ не является ошибкой сопоставления

#django #django-views #django-urls

#django #django-представления #django-urls

Вопрос:

Я начну с того, что это не дублированный вопрос. Моя проблема немного отличается в URL с Django 2.2.

Представление, вызывающее объект ‘str’, не является ошибкой сопоставления при возврате HttpResponseRedirect в другое представление в том же приложении.

Я действительно не знаю, что не так. Я использую тот же метод в другом приложении в том же проекте, и он работает.

Проект 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")
  

После отправки домашней формы он должен перенаправляться в представление основной формы (класс Section view), но я получаю ошибку.

Это вызывает ту же ошибку, если я использую URL-адрес в URL-адресе шаблона {% url 'main-form' %}

Если я вручную перейду к просмотру из адресной строки, просмотр отобразится нормально.

Что не так?

Ответ №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' %}

Комментарии:

1. Большое вам спасибо @Okayjosh Я не знаю почему, но я переделываю проект, и он работает.