viewsのindexでPOSTを送信したのだがそのままのページにとどまる。
POSTで送信したあとトップページに移したいのだがindex関数のTemplateResponseをredirectなどに変えればよいのでしょうか?
python
1viwes.py 2 3from django.template.response import TemplateResponse 4from django.http import Http404 5from django.urls import reverse 6from django.core.paginator import Paginator 7 8from polls.models import Post 9from polls.forms import PostForm 10 11 12def post_list(request): 13 posts = Post.objects.order_by('-created_at') 14 15 paginator = Paginator(posts, 9) 16 17 page = request.GET.get('page', 1) 18 posts = paginator.page(page) 19 20 return TemplateResponse(request, 'polls/post_list.html', 21 {'posts': posts}) 22 23 24def post_detail(request, post_id): 25 try: 26 post = Post.objects.get(id=post_id) 27 except Post.DoesNotExist: 28 raise Http404 29 return TemplateResponse(request, 'polls/post_detail.html', 30 {'post': post}) 31 32 33def index(request): 34 if request.method == 'POST': 35 form = PostForm(request.POST) 36 37 if form.is_valid(): 38 form.save() 39 else: 40 form = PostForm() 41 posts = Post.objects.order_by('-created_at') 42 context = {'posts': posts, 'form': form} 43 44 return TemplateResponse(request, 'polls/index.html', context)
html
1index.html 2<!DOCTYPE html> 3<html lang="ja"> 4 5 6<head> 7 <meta charset="UTF-8"> 8 <title>Title</title> 9</head> 10<body> 11 <h1>ブログ</h1> 12 <h2>投稿</h2> 13<form action="/index/" method="post"> 14 {% csrf_token %} 15 {{ form.as_p }} 16 <input type="submit" value="送信"> 17</form> 18 <button type="button" class="btn btn-light btn-lg"> 19 <a href="{% url 'post_list' %}">TOPページ</a></button> 20</body> 21</html>
html
1post_list.html 2<!DOCTYPE html> 3{% load static %} 4<html lang="ja"> 5<link rel="stylesheet" href="{% static 'cms/css/bootstrap.min.css'%}"> 6<link rel="stylesheet" type="text/css" href="{% static 'cms/stylesheet.css' %}"> 7<head> 8 9 <meta charset="UTF-8"> 10 <title>ブログ</title> 11</head> 12<body> 13<div class="images"> 14<h1 class="text-center font-weight-bold">ブログ</h1> 15</div> 16<h2 class="text-center">タイトル一覧</h2> 17 18 {% for post in posts %} 19 <body class="text-center"> 20 <div class="text-center">{{ post.title }}:<a href="{% url 'post_detail' post.id %}">詳細</a></div> 21 <div class="font-weight-light ">{{ post.created_at }} 22 23 24 </div> 25 26 {% endfor %} 27 28<button type="button" class="btn btn-light btn-lg"><a href="{% url 'index' %}">投稿</a></button> 29<div> 30{% if posts.has_previous %}} 31<a href="?page={{ posts.previous_page_number }}">< 前のページ</a> 32{% else %} 33<span>< 前のページ</span> 34{% endif %} 35 36{{ posts.number }}ページ 37 38{% if posts.has_next %} 39<a href="?page={{ posts.next_page_number }}">次のページ ></a> 40{% else %} 41<span>次のページ</span> 42{% endif %} 43</div> 44</body> 45 46<footer class="text-center text-muted py4"> 47 tttt.com 48</footer> 49</html>
python
1urls.py 2from django.urls import path 3 4from . import views 5 6urlpatterns = [ 7 path('', views.post_list, name='post_list'), 8 path('index/', views.index, name='index'), 9 path('posts/<int:post_id>/', views.post_detail, name='post_detail'), 10]
python
1#もう一つのurls 2from django.contrib import admin 3from django.urls import path, include 4 5urlpatterns = [ 6 path('', include('polls.urls')), 7 path('admin/', admin.site.urls), 8]