

[DjangoGirlsというチュートリアル](https://djangogirlsjapan.gitbooks.io/workshop_tutorialjp/content/django_forms/)に従って、PythonのDjangoを使いblogを作成しようとしています。そこで、ブログの投稿ページは作成し、データをデータベースに保存することはできたものの、次の画面に遷移することができずエラーが出てしまいました。

## 発生している問題・エラーメッセージ

[![画像の説明をここに入力](https://i.stack.imgur.com/blJlm.png)](https://i.stack.imgur.com/blJlm.png)

## ソースコード

post_edit.html

[code]

    {% extends 'posts/base.html' %}
    {% block content %}
        <h1>New post</h1>
        <form method="POST" class="post-form">{% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="save btn btn-default">Save</button>
        </form>
    {% endblock %}
    
[/code]

views.py

[code]

    from django.shortcuts import render, get_object_or_404, redirect
    from django.utils import timezone
    from .models import Post
    from .forms import PostForm
    
    
    # Create your views here.
    def post_list(request):
            posts = Post.objects.filter(published_date__lte=timezone.now()).order_by('published_date')
            return render(request, 'posts/post_list.html', {'posts': posts})
    
    def post_detail(request, pk):
            post = get_object_or_404(Post, pk=pk)
            return render(request, 'posts/post_detail.html', {'post': post})
    
    def post_new(request):
        if request.method == "POST":
            form = PostForm(request.POST)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.save()
                return redirect('posts.views.post_detail', pk=post.pk)
        else:
            form = PostForm()
        return render(request, 'posts/post_edit.html', {'form': form})
    
    def post_edit(request, pk):
        post = get_object_or_404(Post, pk=pk)
        if request.method == "POST":
            form = PostForm(request.POST, instance=post)
            if form.is_valid():
                post = form.save(commit=False)
                post.author = request.user
                post.save()
                return redirect('posts.views.post_detail', pk=post.pk)
        else:
            form = PostForm(instance=post)
        return render(request, 'posts/post_edit.html', {'form': form})
    
[/code]

base.html  
{% load staticfiles %}

[code]

    <html>
        <head>
            <title>Blog</title>
            <link href="http://fonts.googleapis.com/css?family=Lobster&subset=latin,latin-ext" rel="stylesheet" type="text/css">
        </head>
        <body>
            <div class="page-header">
                <h1><a href="/">Blog</a></h1>
                <input type="button" value="投稿" onClick="location.href='/post/new';">
            </div>
    
            <div class="content container">
                <div class="row">
                    <div class="col-md-8">
                    {% block content %}
                    {% endblock %}
                    </div>
                </div>
            </div>
        </body>
    </html>
    
[/code]

`


CC BY-SA 3.0
2017-02-08T12:25:01.613
32502
2017-04-24T07:52:15.643
2017-02-08T12:30:25.033
20570
20570
question
python html css django
HTMLのボタンのエラー


エラー画面を確認するとRequest
URLが`http://127.0.0.1/post/5/edit/posts.views.post_detail`となっています。  
おそらく`redirect('posts.views.post_detail',
pk=post.pk)`のviewの指定が間違っており、`'posts.views.post_detail'`という文字列がそのままURLに使用されているものと推測されます。  
`'posts.views.post_detail'`を存在するviewに変更する必要があるのですが、URLから推測するに`'post.views.post_detail'`ではないでしょうか。

`redirect`の仕様に関しては下記を参照してください。  
<https://docs.djangoproject.com/en/1.10/topics/http/shortcuts/#redirect>


CC BY-SA 3.0
2017-03-23T05:54:22.413
33484
2017-03-23T05:54:22.413
21154
32502
answer