2017-07-14 54 views
0

我正在开发一个博客项目,它显示主页上博客的所有帖子。我为每个博客条目都有一个编辑功能,并包含两个选项:发布和取消。Django:取消编辑后重定向到上一页

这是我的形式看起来像

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

在views.py它看起来像这样:

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 %} 

网址。 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,但它们都能正常工作。任何人都可以帮忙由于

+0

您试图通过代码“{{form.as_p}}'在模板中访问的表单在哪里? 你必须通过你的意见发送它。还使用上下文字典()来解决你的“PK”问题。再次,你不是从你的意见中发送它(pk)。 –

+0

试试'post.id' –

回答

0

首先,没有,你要发送到您的HTML,所以在你的代码中的表单对象,

{{ form.as_p }} 是行不通的。关于访问模板内部的“pk”值,您必须通过context 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 %} 

注意:我不不知道你为什么要将“Post”模型对象发送到模板。但是我仍然保留在代码中。

+0

谢谢你的回答。此模板最初用于创建新帖子和编辑帖子。正如我想增加更多的功能,我只是分开模板,但仍然使用相同的格式。我尝试了你的代码,但仍然不起作用,得到了这个错误信息“NoReverseMatch Reverse for'post_detail'with arguments'('',)'not found。1 pattern(s)tried:['post /(?P \ \ d +)/ $']“ – hakuro

+0

另外,如果我改变了网址在href =”{%url'post_detail'pk%}“任何其他不需要pk的工作正常。 – hakuro

+0

你能告诉我你的urls.py吗?你为什么要把'href =“{%url'post_detail'pk%}'放在anchor标记中取消选项? –