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

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

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

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Python

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

0回答

546閲覧

Django Ajaxを用いて数秒ごとにメッセージを取得したいです。

Mitsu_

総合スコア10

Django

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

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

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

Python

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

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2021/05/14 23:58

編集2021/05/15 12:06

前提・実現したいこと

お世話になります。
メルカリのようなサイトを作っており、
今はメルカリのコメント機能のところを作っております
イメージ説明

相手からのコメントをAjaxを使って自動的に取得したいです。

発生している問題

下のhtmlのscriptタグのソースコードは、以前授業でflaskを用いてメッセージアプリを作ったときに、
相手からのメッセージを自動で取得するために用いたものです。
これを今、私が作っているDjangoのアプリに取り入れ用としたところ、<script>タグ内の中の
{{to_user_id}}の部分,つまり相手側のidをどのように書けばいいのかがわからず、質問させていただきました。
自分側のidは request.user.idで取得できております。
どうぞよろしくお願いいたします。

html

<script> $(function(){ // 5秒間隔でget_new_messagesを実行 timer = setInterval("get_new_messages()", 5000); // 初期表示で画面の一番下に行く var scroll = (document.scrollingElement || document.body); scroll.scrollTop = scroll.scrollHeight; }); user_id = "{{ to_user_id }}"; function get_new_messages(){ $.getJSON("/message_ajax", { user_id: user_id }, function(data){ $('#message-form').before(data['data']); }); }; </script> <h3 class="text-center">商品名: {{product.product_name}}</h3> <div class="row"> {% for comment in comments%} {% if comment.user.id == request.user.id %} <div class="speech-bubble-my col-lg-4 offset-lg-7" > <!-- <p>{{ comment.user.username }}</p> --> <p>{{ comment.comment | linebreaksbr}}</p> </div> <div class="col-lg-1"> <p>{{ comment.user.username }}</p> </div> {% else %} <div class="col-lg-1"> <p>{{ comment.user.username }}</p> </div> <div class="speech-bubble-dest col-lg-4 " > <!-- <p>{{ comment.user.username }}</p> --> <p>{{ comment.comment | linebreaksbr}}</p> </div> <div class="col-lg-7"></div> {% endif %} {% endfor %} {% if user.is_authenticated %} <div class="col-4 offset-7" id="message-form"> <form method="POST"> {% csrf_token %} {{ comments_form.as_p }} <input type="submit" value="コメント送信"> </form> </div> {% endif %} </div>

メッセージを保管しているDB
product_idはユーザー登録した人が出品した商品のidです。
user_idはコメントを書いた人のidです。
イメージ説明

該当のソースコード

models.py

class Comments(models.Model): comment = models.CharField(max_length=1000) user = models.ForeignKey('SellText.Users', on_delete=models.CASCADE) product = models.ForeignKey('SellText.Product',on_delete=models.CASCADE) objects = CommentsManager() class Meta: db_table='comments'

views.py

def post_comment(request, product_id): comments_form =forms.CommentForm(request.POST or None) # comment_product = Comments.objects.all() product = Product.objects.get(id=product_id) comments = Comments.objects.fetch_by_product_id(product_id) if comments_form.is_valid(): if not request.user.is_authenticated: raise Http404 comments_form.instance.product = product comments_form.instance.user = request.user comments_form.save() return redirect('SellText:post_comment',product_id=product_id) return render(request,'comment.html', context={ 'comments_form':comments_form, 'comments':comments, 'product':product } )

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AbeTakashi

2021/05/15 06:07

低評価がついているようですが、ちょっと質問がざっくり過ぎる気がします。「数学の積分が分かりませんので教えてください」レベルです。「書き方が分からない」と言われても回答者がここで手取り足取りすべての書き方を教えるのは無理があります。 参考) https://teratail.com/help/question-tips 1. 質問をする前に心がけてほしいこと 2. 質問をする前に自分で何がわからないのかを把握しましょう をしっかり示して頂かないとアドバイスのしようがなさそうですよ。まずはDjangoの学習をしていただき、自分ができる範囲まで書いてみて「何かしらのエラーが出てこのエラーの解決方法が分かりません」レベルまで質問の粒度を小さくして頂かないと、実のあるアドバイスは出てこないと思います。
Lhankor_Mhy

2021/05/15 06:13

追記を見て、何がわからないのかわからなくなりました。 Flaskでそのコードが書けるなら、Djangoで書けないということはないと思います。 もしかして、クラスビューがわからないという話であれば、Djangoでも関数ベースで書けたはずですよ。
Mitsu_

2021/05/15 07:17

ご迷惑をお掛けし誠に申し訳ございません。 Flaskの本に書いてあったのを見て理解できたかなと言う程度です。 仕事が終わり次第、しっかりと書き直します。 どうぞよろしくお願い致します。
Mitsu_

2021/05/15 07:57

TakashiAbe様 ご丁寧にご指摘頂き、誠にありがとうございます。 編集し、詳しく書き直しますので、どうぞよろしくお願い申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問