モデルの翻訳に django-hvad を使用していますが、すべてのモデルが翻訳されるわけではありません。デフォルトを にしたいen-us
。
リクエストが特定の言語に対して行われた場合、モデルでその翻訳が利用可能であれば、レスポンスはその言語である必要があります。en-us
翻訳が利用できない場合は、返品したい.
今起こっていることは、エラー 500: が表示されることです'HttpResponse' object has no attribute '_meta'
。これは、翻訳が利用できない場合と、言語コードが で定義されていない場合の両方で発生しLANGUAGES
ます。
たとえば、次のリクエストを行うと、ステータス 200 の正しい応答が得られますen-us
。
GET http://localhost:5000/survey/surveys/2/?language=en-us
をリクエストすると、500 エラーが発生します (大文字が からにen-US
変更されていることに注意してください)。en-us
en-US
GET http://localhost:5000/survey/surveys/2/?language=en-US
LANGUAGES
で定義されているが翻訳されていない言語をリクエストすると、同じ 500 エラーが発生します。
GET http://localhost:5000/survey/surveys/2/?language=af
私のsettings.pyファイルの言語セクションは次のとおりです。
設定.py
from django.utils.translation import ugettext_lazy as _
...
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
LANGUAGES = [
('en-us', _('English')),
('af', _('Afrikaans')),
('ar', _('Arabic')),
...
]
このリクエストがどのように処理されるかについて疑問がある場合は、その URL のビューを次に示します。
ビュー.py
class SurveyDetail(APIView):
def get_object(self, pk):
try:
user_language = self.request.GET.get('language')
return models.Survey.objects.language(user_language).get(pk=pk)
except models.Survey.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get_related_questions(self, pk):
try:
user_language = self.request.GET.get('language')
return models.SurveyQuestion.objects.language(user_language).all().filter(survey=pk)
except models.SurveyAnswer.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get_related_answers(self, pk):
try:
user_language = self.request.GET.get('language')
return models.SurveyAnswer.objects.language(user_language).all().filter(question=pk)
except models.SurveyAnswer.DoesNotExist:
return HttpResponse(status=status.HTTP_404_NOT_FOUND)
def get(self, request, pk, format=None):
survey = self.get_object(pk)
questions = self.get_related_questions(pk)
questions_serialized = []
for q in questions:
questions_serialized.append(SurveyQuestionSerializer(q).data)
questions_serialized[-1]['answers'] = SurveyAnswerSerializer(self.get_related_answers(q.pk), many=True).data
resp_obj = SurveySerializer(survey).data
resp_obj['questions'] = questions_serialized
return JSONResponse(resp_obj)