前提・実現したいこと
コメントフォーム。コメントの表示。いいねボタンを一覧にして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>
<br> 以下のパスに遷移をさせました。 ``` path('good/<int:next>/', views.index, name='index'), ```return redirect('board:index', next=pk)
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が表示できるようにしております。
<br> 以下のスプリクトがあるため{% 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> <br><script> {% if next %} window.location.href += '#{{ next }}'; {% endif %} </script>
リダイレクトした際の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)
あなたの回答
tips
プレビュー