Django:取消编辑后无法重定向到上一页

时间:2017-07-14 16:16:07

标签: python django primary-key

我正在开展一个博客项目,在该项目中显示主页上博客的所有帖子。我为每个博客条目都有一个编辑功能,包含两个选项:发布和取消。

这就是我的表格看起来像

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

urls.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,但要么有效。有人可以帮忙。感谢

1 个答案:

答案 0 :(得分:0)

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

{{ form.as_p }} 不行。关于访问模板中的“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 %}

注意:我不知道您为什么要尝试将“发布”模型对象发送到模板。但我仍然把它保存在代码中。