У меня есть приложение, которое включает веб-сайт и API. Я перевел сайт на второй язык. В настоящее время основным языком является английский, а вторым - фарси. Я использовал i18n_patterns
в urlpatterns
для перенаправления между двумя языками. Проблема заключается в том, что при использовании API Django перенаправляет мой запрос, и, поскольку данные отправляются с использованием POST
, он удаляет все данные и дает мне пустой результат с использованием GET
. Я попытался взять URL-адрес API из шаблона URL-адреса, а затем добавить его, что решает эту проблему, но это не работает, поскольку мне нужна поддержка Unicode для фарси, и поскольку таким образом нет поддержки i18n_patterns
, я получаю неразборчивый ответ.
Это URL-шаблон:
urlpatterns = i18n_patterns(
path('admin/', admin.site.urls),
path('mainapp/', include('mainapp.urls')),
path('', include('mainapp.urls')),
prefix_default_language=True
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns.append(path('api/', include('mainapp.api.urls')))
Есть ли способ решить эту проблему с минимальными изменениями в приложении? Любая помощь, предложение или руководство будут очень признательны.
EDIT: Спасибо. Я изменил код, чтобы воспроизвести проблему. Я звоню http://localhost:8000/api/scan/
. Если я добавлю path('api/', include('mainapp.api.urls'))
к исходному шаблону URL-адреса с i18n_patterns
и отправлю запрос в API, значение request.POST
будет <QueryDict: {}>
, в противном случае он должен отправить key:value
на серверную часть. Я осмотрелся, и кажется, что когда вы добавляете i18n_patterns
в шаблоны URL, происходит перенаправление, и, поскольку HTTP не разрешает перенаправление данных POST, я получаю пустой ответ.
/api/scan/
, если вы ожидаете, что запросы будут отправлены на правильном языке. Вы должны отправить на<lang>/api/scan/
, чтобы не получить перенаправление. В качестве альтернативы вы можете установитьprefix_default_language
наFalse
, чтобы URL-адреса на английском языке не были префиксом, и, следовательно, запрос на/api/scan
будет считаться английским и не перенаправляться. - person dirkgroten   schedule 04.12.2019