#前提・実現したいこと
指定されていないURLを打ち込むと、「404NotFound」
という風になると思います。
しかし、404NotFoundと出さないで、他のページにリダイレクトさせて、HTTPステータスを200で返却させたいです。
こちらのサイトに書かれているものから、Flaskでは、可能ということがわかったのですが、Djangoでは、どのように実装すれば良いかわからないです。
教えていただきたいことは、3つあります。
1,HTTPステータスコードの返り値を404から200に指定する方法
2,他のページに自動的にリダイレクトさせる方法
3,1と2を組み合わせる方法
#試したこと
Django HTTPステータス 返り値で検索して出てきた、こちらのサイトでHTTPステータス返り値を指定する方法は、わかりました。
しかし、404から200に指定して、自動的にリダイレクトする方法をわからなかったので、教えていただきたいです。
リダイレクト先は、list.htmlです。
#該当のソースコード
Python
1views.py 2 3from django.shortcuts import render, redirect, get_object_or_404 4from django.contrib.auth.models import User 5from django.views.generic import CreateView,View 6from django.urls import reverse_lazy 7from django.http import HttpResponse 8 9 10 11from .models import BoardModel, Comment, Reply 12 13class FailedRequest(View): 14 def get(self, request, *args, **kwargs): 15 response = HttpResponse(status=400) 16 17 return response 18 19 20def listfunc(request): 21 object_list = BoardModel.objects.all() 22 return render(request, 'list.html', {'object_list': object_list}) 23 24 25def detailfunc(request, pk): 26 object = BoardModel.objects.get(pk=pk) 27 return render(request, 'detail.html', {'object': object}) 28 29 30class BoardCreate(CreateView): 31 template_name = 'create.html' 32 model = BoardModel 33 fields = ('title', 'content', 'author', 'images') 34 success_url = reverse_lazy('list') 35 36 37class CommentView(CreateView): 38 model = Comment 39 fields = ('name', 'text') 40 template_name = 'comment_form.html' 41 42 def form_valid(self, form): 43 post_pk = self.kwargs['pk'] 44 post = get_object_or_404(BoardModel, pk=post_pk) 45 46 comment = form.save(commit=False) 47 comment.post = post 48 # comment.post = get_object_or_404(BoardModel, pk=post_pk) 49 comment.save() 50 # 記事の設定 51 52 return redirect('detail', pk=post_pk) 53 # 記事の詳細にリダイレクト 54 55 56class ReplyView(CreateView): 57 model = Reply 58 fields = ('name', 'text') 59 template_name = 'comment_form.html' 60 61 def form_valid(self, form): 62 comment_pk = self.kwargs['pk'] 63 comment = get_object_or_404(BoardModel, pk=comment_pk) 64 65 reply = form.save(commit=False) 66 reply.target = comment 67 reply.save() 68 # 記事の設定 69 70 return redirect('detail', pk=comment.target.pk) 71 # 記事の詳細にリダイレクト 72
Python
1models.py 2 3from django.db import models 4from django.utils import timezone 5 6 7# Create your models here. 8class BoardModel(models.Model): 9 # 記事 10 title = models.CharField(max_length=100) 11 content = models.TextField() 12 author = models.CharField(max_length=100) 13 images = models.ImageField(upload_to='') 14 good = models.IntegerField(null=True,blank=True,default=0) 15 read = models.IntegerField(null=True,blank=True,default=0) 16 readtext = models.CharField(max_length=200,null=True,blank=True,default='a') 17 created_date=models.DateTimeField(default=timezone.now) 18 def __str__(self): 19 return self.title 20 21class Comment(models.Model): 22 # コメント 23 name=models.CharField(max_length=100,blank=True,default='名無し') 24 text=models.TextField() 25 post=models.ForeignKey(BoardModel,on_delete=models.CASCADE) 26 created_date=models.DateTimeField(default=timezone.now) 27 def __str__(self): 28 return self.name 29 30class Reply(models.Model): 31 # 返信コメント 32 name=models.CharField(max_length=100,blank=True) 33 text=models.TextField() 34 target=models.ForeignKey(Comment,on_delete=models.CASCADE) 35 is_publoc=models.BooleanField(default=True) 36 created_date=models.DateTimeField(default=timezone.now) 37 # defaultの値をFalseにしておくと、コメントの承認機能をつけることが出来る 38 # Trueなので、承認機能が無い状態 39 def __str__(self): 40 return self.name 41
Python
1urls.py 2 3from django.urls import path 4from .views import listfunc, detailfunc, BoardCreate,CommentView 5urlpatterns = [ 6 7 path('', listfunc, name='list'), 8 path('list/', listfunc, name='list'), 9 path('detail/<int:pk>', detailfunc, name='detail'), 10 path('create/', BoardCreate.as_view(), name='create'), 11 path('comment/<int:pk>/',CommentView.as_view(),name='comment'), 12 13 14] 15
HTML
1list.html 2 3 4{% extends 'base.html' %} 5 6{% block customcss %} 7{% endblock customcss %} 8 9{% block header %} 10 <div class="alert alert-primary" role="alert"> 11 掲示板風SNS 12 </div> 13{% endblock header %} 14 15{% block content %} 16 <div class='container'> 17 {% for item in object_list %} 18 <div class="alert alert-success" role="alert"> 19 <p>タイトル:{{ item.title }}</p> 20 <p>投稿者:{{ item.author }}</p> 21 <a href="{% url 'detail' item.pk %}">続きを読む</a> 22 23 </div> 24 {% endfor %} 25 26 27 <a href="{% url 'create' %}" class="btn btn-info btn-lg " tabindex="-1" role="button" 28 aria-disabled="true">新規作成</a> 29 </div> 30{% endblock content %} 31
#教えていただきたいこと
3点あります。
1,HTTPステータスコードの返り値を404から200に指定する方法
2,他のページに自動的にリダイレクトさせる方法
3,1と2を組み合わせる方法
自力で解決できるようになりたいので、どのように考えたかも教えていただけますと、幸いです。!
回答1件
あなたの回答
tips
プレビュー