質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

解決済

クラスベースビューの特定のメソッドのみを非同期通信で実行したい

tomi2904
tomi2904

総合スコア20

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

1回答

0リアクション

1クリップ

131閲覧

投稿2022/08/07 09:16

ボタンを押したらGamingViewのpostメソッドのみが実行されてほしいのですが、__init__メソッドから行われてしまいます。どのようにすればよいでしょうか?

以下詳細です

  • answer_formに文字列を入力してボタンを押すとPOSTが実行され、GamingViewのself.params[answers]にappendしたい
  • 画面をリロードしたくないのでfetchによる非同期通信を行なっている

質問用に抜粋・簡略化しています。よろしくお願いします。

python

# views.py class GamingView(generic.TemplateView): template_name = 'gaming.html' def __init__(self): # viewとhtml間で受け渡しされる変数. 何度も使い回すのでインスタンス変数として宣言 self.params = { 'answers': [], } def get(self, request, *args, **kwargs): return render(request, self.template_name, self.params) # ボタンを押したらこのメソッドだけが行われてほしい def post(self, request, *args, **kwargs): answer = request.POST.get('answer') # 入力された解答 self.params['answers'].append(answer) return JsonResponse(self.params)

python

# urls.py from django.urls import path from .import views app_name = 'game' urlpatterns = [ path('', views.TitleView.as_view(), name='title'), # タイトル画面 path('gaming/', views.GamingView.as_view(), name='gaming'), # ゲーム中の画面 ]

html

<!-- gaming.html --> <body> <div class="home-content wrapper"> <form id="answer_form" name="answer_form"> {% csrf_token %} <input id="answer" type="text" name="answer", value=""> <button id="submit-button" class="button-game" type="submit">解答</button> </form> <h3 class="question" id="hoge_output" >出力先</h3> </div> <script > const answer_form = document.getElementById('answer_form') answer_form.addEventListener('submit', (e) => { e.preventDefault() const url = '{% url "gaming" %}' const answer = document.getElementById('answer') const body = new URLSearchParams() body.append('answer', answer.value) fetch('', { method: 'POST', body: body, headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8', 'X-CSRFToken': csrftoken, }, }) .then((response) => { return response.json() }) .then((response) => { answer.value = '' // gamingviewのself.paramsのanswersの長さを出力する document.getElementById('hoge_output').innerHTML = response.answers.length }) .catch((error) => { console.log(error) }) }) </script> </body>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

hoshi-takanori

2022/08/07 21:36

セッション変数とかを使う必要があるのでは…。
tomi2904

2022/08/07 22:05

回答ありがとうございます。セッション変数について調べてみようと思います。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。