やりたいこと
DjangoでWEBアプリを作成しています。
質問を、翻訳して、表示する機能を実装しています。
個別の質問をDetailViewで表示したいです。
翻訳するためのtranslate関数がうまく動いていることは確認できています。
そして、現状は、下記のviews.pyで、
context['title_translate'] = translate(self.object.title, lang)
とし、
template側で、
{{title_translate}}
とすることで、翻訳結果を表示できています。
困っていること
上記のように、毎回毎回context[' ']に入れて、テンプレート側でそれを表示させるのは、あまり効率的ではないのかなと思っています。
可能ならば、
views.pyにおいて、
self.object.title.translation = translate(self.object.title, lang)
という形でobject.titleにtranslationというアトリビュートを持たせ、
template側でも、
{{ object.title.translation }}
として取得できたら良いなと思っています。
しかし、実際にそのように実装すると、
'str' object attribute 'translate' is read-only
というアトリビュートエラーが発生します。
どうしたら、良いでしょうか。
コード
python
1# views.py 2# 翻訳するための関数 3def translate(self, lang): 4 translator = Translator() 5 try: 6 translation = translator.translate(self, dest=lang).text 7 except: 8 translation = translator.translate(self, dest='en').text 9 return translation 10 11# 個別の質問を表示 12class QuestionDetailView(DetailView): 13 14 model = Question 15 16 def get_context_data(self, **kwargs): 17 lang = get_language() 18 context = super().get_context_data(**kwargs) 19 context['title_translate'] = translate(self.object.title, lang) # ←ここを変えたい 20 return context
python
1# models.py 2# 質問 3class Question(models.Model): 4 title = models.CharField(max_length=100) 5 content = models.TextField() 6 7 def __str__(self): 8 return self.title 9
お分かりの方、ご教示頂ければ幸いです。
よろしくお願い致しますm(__)m
あなたの回答
tips
プレビュー