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

Django: Trouble redirecting to previous page after cancel editing

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

这是我的表格的样子

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 和 post.pk 但两者都有效。任何人都可以提供帮助。谢谢

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

{{ form.as_p }} 不会工作。关于访问模板内的 "pk" 值,您必须通过上下文 dict() 发送它。

既然您已经讲述了表单 class,

试试这个,

#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" 模型对象发送到模板。但我还是把它留在了代码中。