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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

HTML

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

Q&A

0回答

2448閲覧

<python,Django>urlをredirectした際にURLの#が削除されず残ってしまう

sr2460

総合スコア49

Django

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

HTML

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

0グッド

0クリップ

投稿2019/02/02 03:03

編集2022/01/12 10:55

前提・実現したいこと

コメントフォーム。コメントの表示。いいねボタンを一覧にしてwebアプリケーションを制作しています。
イメージ説明

いいねボタンを押した後のurlでformを送信するとページの一番上ではなく途中に遷移してしまうのでそれを解決したいです。

以下のようなpath構造でサイトを作っております

app_name = 'board' urlpatterns = [ path('', views.ListView.as_view(), name='board'), path('good/<int:pk>', views.good, name='good'), path('good/<int:next>/', views.index, name='index'), ]

good関数でいいねボタンを押すと数値が1増えるようにしています。

def good(request, pk): """いいねボタンをクリック.""" post = get_object_or_404(Post, pk=pk) if request.method == 'POST': # データの新規追加 post.good += 1 post.save() return redirect('board:index', next=pk)

そのまま元のページに戻るだけなら

return redirect('board:board')

で構わないのですが、
いいねボタンを押した場所にリダイレクトをさせたかったのでリダイレクトを変更し、<br>

return redirect('board:index', next=pk)
<br> 以下のパスに遷移をさせました。 ``` path('good/<int:next>/', views.index, name='index'), ```

views.indexは以下のようになっており、

python

1 2def index(request, next=None): 3 form = PostForm(request.POST or None) 4 question = Question.objects.all() 5 post_list = Post.objects.order_by('-date') 6 7 if request.method == 'POST' and form.is_valid(): 8 form.save() 9 return redirect('board':board) 10 11 context = { 12 'next': next, 13 'question': question, 14 'post_list': post_list, 15 'form': form, 16 } 17 18 return render(request, 'board/board.html', context) 19

以下のhtmlが表示できるようにしております。

{% extends 'board/base.html' %} {% block content %} {% load static %} <link rel="stylesheet" type="text/css" href="{% static 'board/style.css' %}"> <div class="alert alert-primary" role="alert"> <strong><p class="w-normal"><a href="http://localhost:8000/polls/">現在投票中のアンケート一覧{% for questions in question %}{% if questions.is_date_limit %}<li>{{ questions.question_text }}{% endif %}{% endfor %}</li></a></p></strong> </div> <div class="mb-5"> <div class="ml-md-2"> <form action="" method="POST" enctype="multipart/form-data"> {{ form.as_p }} <button type="submit">送信</button> {% csrf_token %} </form> </div> </div> {% for post in post_list %} <div class="alert alert-success" role="alert"><p class="w-normal"><strong>{{ post.name }}</strong> さん</p></div> <div class="mb-2"> <div class="ml-md-2"> <p class="w-normal">{{ post.text | linebreaksbr }}</p> </div> {% if post.file %} <p><img src="{{ post.file.url }}"></p> {% endif %} <div id="{{ post.pk }}" class="ml-md-2"> <p>{{ post.date }}</p> <form action="{% url 'board:good' post.pk %}" method="post"> {% csrf_token %} <input type="submit" name="good" value="いいね">({{ post.good }} いいね) </form> </div> {% endfor %} {% include 'board/page4.html' %} <script> {% if next %} window.location.href += '#{{ next }}'; {% endif %} </script> </div> {% endblock %}
<br> 以下のスプリクトがあるため
<script> {% if next %} window.location.href += '#{{ next }}'; {% endif %} </script>
<br> <br>

リダイレクトした際のURLはこのようになっており、

http://localhost:8000/board/good/70/#70

ページの途中に遷移させる仕様の実現のため#70(この数字は可変的)がついています。

そしてこのリダイレクトしたページは

上記関数def indexで

if request.method == 'POST' and form.is_valid(): form.save() return redirect('board':board)

と書いているためフォームの送信が可能なのですが、フォームの送信をしても、以下のようにリダイレクト先を設定しているにも関わらず。

return redirect('board':board)

以下のようなURLにリダイレクトし、

http://localhost:8000/board/#70

(#数字)が残ってしまいます。本来であればURLは

http://localhost:8000/board/

pathとしては

path('', views.ListView.as_view(), name='board'),

にリダイレクトをするはずなのですが、現状は(#数字)という形が残ってしまっています。
この数字をリダイレクト時に削除するにはどのようにすれば良いでしょうか?

発生している問題・エラーメッセージ

エラーメッセージはありませんが

return redirect('board:board')

を削除することで

http://localhost:8000/board/good/70/#70#70

このようなURLに遷移。かつページの途中でなく一番上に遷移してくれます。
ただしこれだとフォームから送信した文章が消えずに残るという問題があります。

試したこと

JavaScriptを勉強すれば上手くいきそうだというのは体感的に理解し始めており意欲もあるのでいずれはそのように修正したいのですが、それですとすぐにというわけにはいきませんので今回質問をさせていただきました。
同じ個所の質問をこちらでもしていて心苦しいのですが色々なアプローチがあるかもと思ったのでもしよければアドバイスお願いいたします。

https://teratail.com/questions/172062

補足情報(FW/ツールのバージョンなど)

python=3.7.0
django=(2, 0, 2, 'final', 0)

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

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

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

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

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

wwbQzhMkhhgEmhU

2019/02/03 10:13

原因はテンプレート中のJavaScriptによる不要なフラグメント指定追加だと思います。ただ、追加したいのか更新したいのか、いいねボタンが押したとき何をしたいのか理解に苦しむコードだったので、それでいいのかも分かりません。 まず、コードを全面整理した上で、全部貼ってください。足りなくて動かないとかでは貼る意味ないので、動く範囲で説明に必要な最低限のコードに削りましょう。その上でこういう操作をしたときにこう動かしたいが、こういう現象が起きていて、期待どおりの動作にならない、という説明をしてください。
sr2460

2019/02/04 00:06

おせわになります!! ご指摘ありがとうございます!!! 質問の内容を全面的に修正してみます。
wwbQzhMkhhgEmhU

2019/02/04 05:11

部分的なコードがあっても意味がありません。問題点が別のファイルの別の場所にあることが多いからです。また、全コードがあれば別の人がそのまま動かすことが出来ます。 なので、それらのファイル内容の全てを貼って頂いた上で、今回の質問したいことをよく整理してまとめてください、という話です。 ただ今動いているものをそのまま全部貼ると大きいので、まずは (1)今のコードを綺麗に整理する (2)「説明に不必要」なコードを、「初期化から説明したい部分に至るまでの動作が全て可能な状態になる」範囲で、可能な限り削る (3)(1)で整理、(2)で不要部分削除したものを全て貼る ということをして欲しいと言っています。 現状では(1)も行われておらず、(2)も全く動作しないレベルで削られ、問題点の説明も、目指している状態の説明もできていません。
sr2460

2019/02/04 10:25

わかりました!! ただ私の今の力ではすぐにできるというわけにいかないので時間をかけて取り組みたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問