前提
ここに質問の内容を詳しく書いてください。
もともと作成していたAWSを用いたサービスを
Djangoで動作させたいです。
こちらのソースコードがもともと作成していたものになります。
Amazon Translateを用いた翻訳サービスになります。
Pythonの法のコードがルーティングを管理する「menu.py」で、
そのほかにも「comp_sentiment.py」、「speech_synthesis.py」、「trans_text_ja_2.py」
とクラス化させて「menu.py」から利用いています。
HTML側からpostで送信された時のvalueの値で判定させてHTMLに結果を都度都度
返している感じです。
HTML
1<p class="text">入力された言語は自動判定で適切に翻訳します。 音声合成も言語に合わせて適切に読み上げます。</p> 2 <form method="post" action="/trans/" enctype="multipart/form-data"> 3 <div class="flex_test-box"> 4 <div class="flex_test-item"> 5 <textarea class = "input" name="input_text" rows="25" cols="84" maxlength="5000" placeholder="こちらに翻訳させたい文章を入力してください。">{{input_text}}</textarea> 6 <div class = "translate"> 7 <select name="lang"> 8 {% for lang in lang %} 9 {% if lang.selected %} 10 <option value="{{ loop.index0 }}" selected> {{ lang.display }}</option> 11 {% else %} 12 <option value="{{ loop.index0 }}"> {{ lang.display }}</option> 13 {% endif %} 14 {% endfor %} 15 </select> 16 <input type="submit" name = "send" value="翻訳する"> 17 </div> 18 <div class="file"> 19 <input type="file" name="file" accept=".txt"> 20 <br> 21 <input type="submit" name = "send" value="ファイルを読み込む"class="read"> 22 <p class="string_count">{{input_lengh}}</p> 23 <div id="innerHTMLtxt"></div> 24 </div> 25 </div> 26 <div class="flex_test-item"> 27 <textarea name="output_text" rows="25" cols="84" placeholder="翻訳結果がこちらに表示されます。" readonly>{{output_text}}</textarea> 28 <input type="submit" name="send" value="音声合成"> 29 <input type="submit" name = "send" value="感情分析"> 30 {{sentiment}} 31 <br> 32 <audio src="{{polly}}" controls preload="metadata" class="audio"></audio> 33 <div id="innerHTMLtxt2"></div> 34 </div> 35 </div> 36 </form>
Python
1# 直接アクセスした場合もメニューに強制遷移 2@app.route('/') 3def index(): 4 return render_template('menu.html') 5 6# メニュー 7@app.route('/menu/') 8def trans_menu(): 9 return render_template('menu.html') 10 11# パラメータがある場合は、翻訳して表示する 12@app.route('/trans/', methods=['GET', 'POST']) 13def trans(): 14 #翻訳 15 lang = [ 16 {"display": "ドイツ語", "code": "de"}, 17 {"display": "英語", "code": "en"}, 18 {"display": "スペイン語", "code": "es"}, 19 {"display": "フランス語", "code": "fr"}, 20 {"display": "イタリア語", "code": "it"}, 21 {"display": "ポルトガル語", "code": "pt"}, 22 {"display": "日本語", "code": "ja"}, 23 {"display": "韓国語", "code": "ko"}, 24 {"display": "ヒンディー語", "code": "hi"} 25 ] 26 # 読み上げ 27 polly_lang = {"de": "Hans", "en": "Emma", "es": "Lucia", "fr": "Celine", 28 "it": "Giorgio", "pt": "Cristiano", "ja": "Mizuki", "ko": "Seoyeon", "hi": "Aditi"} 29 try: 30 if request.method == 'POST': 31 # リクエストパラメータを読み込む 32 in_text = request.form['input_text'] 33 language = request.form['lang'] 34 35 #取得したインデックスに対応する辞書の中のcodeで言語コードを取得 36 targetlanguagecode = lang[int(language)]['code'] 37 38 #選択された言語のselectedをTrueに 39 lang[int(language)]['selected'] = True 40 41 #文字数カウント再出力用 42 in_text_length = in_text.replace( '\n' , '' ) 43 44 # 値を取得 45 value = request.form.get('send', None) 46 47 # 取得した値が翻訳なら 48 if value == "翻訳する": 49 # それぞれ引数を持って翻訳 50 result = trans_text_ja_2.translate(in_text, targetlanguagecode) 51 52 # 翻訳済みテキストをグローバル変数で取得 53 global transretedtext 54 transretedtext = result['TranslatedText'] 55 56 # 翻訳の結果を返す 57 return render_template('translate.html', 58 input_text=in_text, 59 output_text=transretedtext, 60 lang=lang, 61 input_lengh=f"{len(in_text_length)}/5000") 62 63 elif value == "音声合成": 64 65 #viceIDを取得 66 trget_langcode = polly_lang[targetlanguagecode] 67 68 # 引数をもって音声ファイル作成 69 path = speech_synthesis.polly(transretedtext, trget_langcode) 70 71 # 音声合成の結果を返す 72 return render_template('translate.html', 73 input_text=in_text, 74 output_text=transretedtext, 75 lang=lang, polly=f"../{path}", 76 input_lengh=f"{len(in_text_length)}/5000") 77 78 elif value == "感情分析": 79 80 # 分析結果を取得 81 sentiment = comp_sentiment.sentimentsearch(transretedtext, targetlanguagecode) 82 83 # 感情分析の結果を返す 84 return render_template('translate.html', 85 input_text=in_text, 86 output_text=transretedtext, 87 lang=lang, 88 polly='', 89 sentiment=f"分析結果:{sentiment['Sentiment']}", 90 input_lengh=f"{len(in_text_length)}/5000") 91 92 elif value == "ファイルを読み込む": 93 94 #保存したファイルを読み込んで表示 95 f = request.files.get('file') 96 filename = secure_filename(f.filename) 97 filepath = f'static/text/{filename}' 98 f.save(filepath) 99 data = "" 100 with open(filepath, 'r', encoding='UTF-8') as f: 101 data = f.read() 102 103 #結果を返す 104 return render_template('translate.html', 105 input_text=data, 106 output_text='', 107 lang=lang, 108 input_lengh=f"{len(data)}/5000") 109 110 # 翻訳画面をまっさらで表示 111 return render_template('translate.html', 112 input_text='', 113 output_text='', 114 lang=lang, 115 input_lengh="0/5000") 116 117 #すべての例外をキャッチし、エラー画面に飛ばす 118 except Exception: 119 return render_template('error.html')
ここに実現したいことを箇条書きで書いてください。
これらのサービスをDjango上で動かしたいのですが、menu.pyの処理を
どのようにして実装すればいいのかよくわかりません。
ひとまずはHTMLを表示させてみたのですが、pythonとの連携の部分が全然わかりません。
views.pyのところにmenu.pyの処理を記述してrenderすればいいのかと思って
試したんですけどさっぱりです><
該当のソースコード
HTML
1<a class="btn btn-border-shadow btn-border-shadow--color2" href="{% url 'AI:trans' %}" role="button">翻訳へ</a>
Python
1#urls.py 2urlpatterns = [ 3 path('', views.IndexView.as_view(), name="index"), 4 path('trans/', views.trans, name='trans'), 5]
Python
1#views.py 2#ここにmenu.pyの内容を書いてみました。 3class IndexView(generic.TemplateView): 4 template_name = "menu.html" 5def trans(request): 6#翻訳 7 lang = [ 8 {"display": "ドイツ語", "code": "de"}, 9 {"display": "英語", "code": "en"}, 10 {"display": "スペイン語", "code": "es"}, 11 {"display": "フランス語", "code": "fr"}, 12 {"display": "イタリア語", "code": "it"}, 13 {"display": "ポルトガル語", "code": "pt"}, 14 {"display": "日本語", "code": "ja"}, 15 {"display": "韓国語", "code": "ko"}, 16 {"display": "ヒンディー語", "code": "hi"} 17 ] 18 # 読み上げ 19 polly_lang = {"de": "Hans", "en": "Emma", "es": "Lucia", "fr": "Celine", 20 "it": "Giorgio", "pt": "Cristiano", "ja": "Mizuki", "ko": "Seoyeon", "hi": "Aditi"} 21 try: 22 if value == "翻訳する": 23 # それぞれ引数を持って翻訳 24 result = trans_text_ja_2.translate(in_text, targetlanguagecode) 25 26 # 翻訳済みテキストをグローバル変数で取得 27 global transretedtext 28 transretedtext = result['TranslatedText'] 29 30 # 翻訳の結果を返す 31 return render(request, 'trans.html', 32 input_text=in_text, 33 output_text=transretedtext, 34 lang=lang, 35 input_lengh=f"{len(in_text_length)}/5000") 36#こんな感じでそのままコピーしただけなんですけど。。 37#やっぱりうまくいきません。
よろしくお願いしますm()mm()m
あなたの回答
tips
プレビュー