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

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

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

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

Python

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

Q&A

1回答

743閲覧

POSTで送信したあとTOPページに移りたいのだが移らない

shito1212

総合スコア10

Django

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

Python

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

0グッド

0クリップ

投稿2019/01/23 08:54

編集2022/01/12 10:55

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 }}">&lt; 前のページ</a> 32{% else %} 33<span>&lt; 前のページ</span> 34{% endif %} 35 36{{ posts.number }}ページ 37 38{% if posts.has_next %} 39<a href="?page={{ posts.next_page_number }}">次のページ &gt</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]

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

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

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

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

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

_Victorique__

2019/01/23 09:02

止まっているだけですか? 何かエラーは出ていませんか?
shito1212

2019/01/23 09:16

いえ、エラーは出ていなく同じページになるだけです。 トップページに戻るとタイトルなど表示されるのでPOSTの送信自体は成功していると思われます。
guest

回答1

0

Python

1return render(request, 'polls/index.html', context)

とか

Python

1return redirect('polls/index.html')

試してみてください

投稿2019/01/23 09:02

yamato_user

総合スコア2321

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

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

shito1212

2019/01/23 09:31

renderでは変わらずredirectでやるとPage not foundと出てしまいました。
yamato_user

2019/01/23 09:43

あー、二つurls.pyがあると思うんですけど、もう一方乗せてもらっていいですか?一般的に/から指定する方のurls.py たぶんそれで解決。 おそらく、urlの指定が間違っているだけですね
shito1212

2019/01/23 09:49

もう一つのurls.py追加させていただきました。
yamato_user

2019/01/23 09:55

return TemplateResponse(request, '/polls/index.html', context) か return render(request, '/polls/index.html', context) か return redirect('/polls/index.html') でいかないですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問