Django Girls and Boys 備忘録

Python、Selenium、Django、java、iPhoneアプリ、Excelマクロなどで気付いたこと、覚えておきたいことなどを載せていきます。

【Django】Djangoでのhtml(javascript)側からpython(views.py)側へ値を送る時の方法の一例

 



Djangoはまだまだ素人な所もあって、いろいろと疑問点が出てきます。

 

通常views.py→html,javascript側にデータを送りたいような時は、関数の最後で、

 

    txt = {
        'abc':abc
    }
    return render(request, 'aaaaaaaa/bbbbbbbb.html', txt)

 

などと記載することでできますが(変数abcをtxtに入れて送付)、逆に、

 

html,javascript→views.py側にデータを送りたいような時は、どうすればいいんだとか出てきます。

 

これにちょっと苦労したので備忘録として残しておきます。

 

目次

 

 

1.コード記載例

 

別の方法もあるのではないかと思いますが、ようやく1つの方法を見つけ出したので忘れないように残しておきます。

 

Javascript側で仮にcountとして持っていたデータ(変数)をpython(views.py)側になんとかして渡したいというような場合についての例になります。

 

まず、html側でformを使用して以下のように記載しておきます。

この中で、formにはinput要素と「保存」ボタンを記載しています。

input要素側はtype="hidden"としていますので表示されずデータ送信用として使用しているということになります。

その結果、画面上は「保存」ボタンのみが表示されることになります。

 

html

<form action="{% url 'appname:cccccccc' %}" method="post">
    {% csrf_token %}
    <div>
       <input type="hidden" id="id1"> </div> <input type="submit" value="保存"> </form>

 

また、スクリプト側には以下のような記述を追加しておきます。

 

<script>
  var element = document.getElementById('id1');
   element.value = count;

 

urls.py側は、app_name = 'appname'にて、urlpatterns 内に、

path('ccccccc', views.ccccccc, name='ccccccc')

を追加します。

 

urls.py

app_name = 'appname'

urlpatterns = [
                   :
                   :
        path('ccccccc', views.ccccccc, name='ccccccc'),    # ←追加

]

 

 

views.py側には関数cccccccとして以下のように定義しておきます。

 

views.py

def ccccccc(request):

    if request.method == 'POST':
       var1= request.POST['id1']

 

2.コードの説明

 

これにより、htmlのスクリプト側で

   var element = document.getElementById('id1');
   element.value = count;

にて、IDがid1となっている要素としてinput要素がelementに取り込まれ、スクリプト側で持っているcount変数の値がelementのvalueとしてinput要素の入力値に入ります。

 

html側の「保存」ボタンがクリックされると、html側の

action="{% url 'appname:cccccccc' %}"

より、urls.py内のアプリケーション名が'appname'で、urlpatterns内のnameが'cccccc'として一致する行がヒットします。

その行内の「views.ccccccc」からviews.py内の関数cccccccが実行されます。

 

その結果、views.pyの関数cccccccの中の、

if request.method == 'POST':
       var1= request.POST['id1']

にて、html側から届いたラベルの入力値を受け取って変数var1に入れられるということになると思います。

 

これにより、javascript側の変数countの値がpythonのviews.py側の変数var1に取り込まれるということになります。

 

 

関連記事:

【Django】マイグレーション実行時に「sqlite3.OperationalError: table "**********" already exists」のようなエラーが出た時の対処方法 - Django Girls and Boys 備忘録

 

【Django】Djangoでのhtml(javascript)側からpython(views.py)側へ値を送る時の方法の一例 - Django Girls and Boys 備忘録

 

【Git】Gitのダウンロード、インストール方法 - Django Girls and Boys 備忘録

 

【Git GitHub】初心者、初級者におすすめの入門書 - Django Girls and Boys 備忘録

 

【Python Django】git init について - Django Girls and Boys 備忘録

 

【Git】ユーザー名とメールアドレスの設定方法 - Django Girls and Boys 備忘録

 

【Git】git addとステージングエリア(インデックス)への登録について - Django Girls and Boys 備忘録

 

【Git】git commitとローカルリポジトリへの登録、gitの概略イメージ - Django Girls and Boys 備忘録

 

【Git GitHub】GitHubのアカウント作成方法 - Django Girls and Boys 備忘録

 

【Git GitHub】公開鍵の設定方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Gitのダウンロード、インストールから「git add」、「git commit」によるGitへの登録までの一通りの方法 - Django Girls and Boys 備忘録

 

【Git GitHub】「git add」、「git commit」後の「git push」について、リモートリポジトリにプッシュする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】プルリクエストとマージを実行する方法 - Django Girls and Boys 備忘録

 

【Git GitHub】リモートリポジトリをクローンする方法 - Django Girls and Boys 備忘録

 

【Git GitHub】プルリクエスト実施後にThere isn’t anything to compare. master and update_branch are entirely different commit histories.が出た時の対応方法 - Django Girls and Boys 備忘録

 

【Git GitHub】コミット履歴の確認とコミットを元に戻す方法 - Django Girls and Boys 備忘録

 

【Git GitHub】Git、GitHubのダウンロード、インストール、「git add」、「git commit」によるGitへの登録と「git push」、マージによるGitHubのmasterへの反映とクローンまでの一通りの方法 - Django Girls and Boys 備忘録