djangoでredirectを使用すると「'str' object has no attribute 'method'」と言うエラーが出ます。
1.一応renderでdisplay_blogs.htmlなどrenderに置き換えればエラーが出ないのは確認済みです。
2.save()も正常に動作していることからPOSTの方に処理は行っているみたいです。
3.from django.shortcuts import redirectでインポートもしています。
該当するのは「views.py」の下の「return redirect('app:display_blogs')」の部分です。
def edit_blog(request, blog_id): blog = get_object_or_404(Blog, id=blog_id) if request.method == "POST": form = BlogForm(request.POST, instance=blog) if form.is_valid(): form.save() return redirect('app:display_blogs')#リダイレクトにするとエラー発生 else: form = BlogForm(instance=blog) context = { 'blog': blog, 'form': form, } return render(request, 'app/edit_blog.html', context)
urls.py
from django.urls import path from . import views app_name = 'app' urlpatterns = [ path('display_blogs/', views.display_blogs, name='display_blogs'), path('edit_blog/<int:blog_id>/', views.edit_blog, name='edit_blog'), ]
display_blogs.html
{% extends 'app/base.html' %} {% block content %} <table class = 'data_record'> <tr> <th>title</th> <th>create date</th> <th></th> </tr> {% for blog in blogs %} <tr> <td>{{ blog.title }}</td> <td>{{ blog.created_datetime }}</td> <form method="get" action="{% url 'app:edit_blog' blog.pk %}"> <td><button type="submit" class="edit_button">edit</button></td> </form> </tr> {% endfor %} </table> {% endblock %}
edit_blog.html
{% extends 'app/base.html' %} {% block content %} {% load widget_tweaks %} <form action="{% url 'app:edit_blog' blog.id %}" method="POST">{% csrf_token %} <table> <tr> <td>title:</td> <td>{{ form.title|add_class:"input_box" }}</td> </tr> <tr> <td>body:</td> <td>{{ form.text|add_class:"input_box" }}</td> </tr> <tr> <td></td> <td><button type="submit" class="post_button">save</button></td> </tr> </table> </form> {% endblock %}
「def edit_blog(request, blog_id):」のすぐ下に「redirect」を指定しただけでも同じエラーが出てしまったので、
redirectの指定の仕方が問題なのかと思い、引数に「app/display_blogs/」や「display_blogs/」等入れてみたりしましたができませんでした。
どなたかご教授頂けると幸いです。
ご回答の程よろしくお願いいたします。
リダイレクトだけする関数を作成しましたが、それだけでもエラーが出ます。
どうやらredirectの部分に問題があるように思われますが引き続き調査しております。
よろしくお願いいたします。
#urls.py path('test_redirect/', views.test_redirect, name='test_redirect'), #views.py #test def test_redirect(request): return redirect('app:index')
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/05/10 05:28
2020/05/10 05:41
退会済みユーザー
2020/05/10 05:51
2020/05/10 06:05
退会済みユーザー
2020/05/10 06:10
退会済みユーザー
2020/05/10 09:09
2020/05/10 09:20
退会済みユーザー
2020/05/10 09:52