2017-07-14 1 views
0

私はブログプロジェクトに取り組んでいます。ここにはホームページのブログのすべての投稿が表示されています。私は各ブログエントリの編集機能を持っており、公開とキャンセルの2つのオプションがあります。Django:編集をキャンセルしても前のページにリダイレクトされない

def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    return render(request, 'blog/post_detail.html', {'post': post}) 

HTMLで、それは次のようになります:

{% extends 'blog/base.html' %} 
{% block content %} 
    <h1>Edit post</h1> 

    <form method="POST" class="post-form">{% csrf_token %} 
     {{ form.as_p }} 
     <button type="submit" class="save btn btn-default" >Publish</button> 
     <a class="btn btn-default" href="{% url 'post_detail' pk=? %}">Cancel</a> 
    </form> 
{% endblock %} 

のURL

これはviews.pyでは、それはこのようになります

class PostForm(forms.ModelForm): 
    class Meta: 
     model = Post 
     fields = ('title', 'text',) 

ように私の形が見えるものです。 py

urlpatterns = [ 
    url(r'^$', views.post_list, name='post_list'), 
    url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail'), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
    url(r'^post/(?P<pk>\d+)/edit/$', views.post_edit, name='post_edit'), 
    url(r'^post/(?P<pk>\d+)/remove/$', views.post_remove, name='post_remove'), 
    url(r'^post/(?P<pk>\d+)/comment/$', views.add_comment, name='add_comment_to_post'), 
    url(r'^comment/(?P<pk>\d+)/remove/$', views.comment_remove, name='comment_remove'), 
    url(r'^comment/(?P<pk>\d+)/edit/$', views.comment_edit, name='comment_edit'), 
] 

私はhtmlのpkが何であるか把握できませんでした。私はpkとpost.pkを試しましたが、どちらかが動作します。誰でも手伝うことができます。あなたのコードでは、

{{ form.as_p }} は動作しませんので、おかげですべての

+0

テンプレート内で、{{form.as_p}}というコードを使ってアクセスしようとしているフォームはどこですか? あなたはあなたの意見を送信する必要があります。また、コンテキストdict()を使って "pk"問題を解決してください。もう一度あなたの意見からそれを送っていません(pk)。 –

+0

「post.id」を試してください –

答えて

0

まず、あなたがあなたのhtmlに送っているフォームオブジェクトは、ありません。テンプレート内の "pk"値へのアクセスに関しては、あなたのコンテキストdict()を通してそれを送る必要があります。

今、あなたは、フォームクラスについて言ったことを、

#Import the form from forms.py 
def post_detail(request, pk): 
    post = get_object_or_404(Post, pk=pk) 
    form = PostForm() 
    context = {'post' : post , 'pk' : pk , 'form' : form} 
    return render(request, 'blog/post_detail.html', context) 

、これを試してみて、テンプレートがどのように見えるべきで、

{% extends 'blog/base.html' %} 
{% block content %} 
<h1>Edit post</h1> 

<form method="POST" class="post-form">{% csrf_token %} 
    {{ form.as_p }} 
    <button type="submit" class="save btn btn-default" >Publish</button> 
    <a class="btn btn-default" href="{% url 'post_detail' pk=pk %}">Cancel</a> 
</form> 
{% endblock %} 

:Iドン」テンプレートに "Post"モデルオブジェクトを送信しようとしている理由が分かりません。しかし、それでも私はコード内に保管しました。

+0

ありがとうございます。このテンプレートはもともと新しい投稿の作成と編集の両方に使用されていました。それぞれの関数に関数を追加したいので、テンプレートを分割するだけですが、同じ形式を使用します。私はあなたのコードを試みましたが、まだこのエラーメッセージを持っていません "NoReverseMatch引数を '' '、' 'が見つかりません' post_detail 'のために逆転しようとしました1パターンが試行されました:[' post /(?P \ \ d +)/ $ '] " – hakuro

+0

また、href =" {%url' post_detail 'pk%} "のURLをpkを必要としない他のものに変更するとうまく動作します。 – hakuro

+0

あなたはあなたのurls.pyを見せてくれますか?キャンセルオプションのアンカータグの中に 'href =" {%url 'post_detail' pk%} 'を入れているのですか? –

関連する問題