我正在开展一个博客项目,在该项目中显示主页上博客的所有帖子。我为每个博客条目都有一个编辑功能,包含两个选项:发布和取消。
这就是我的表格看起来像
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,但要么有效。有人可以帮忙。感谢
答案 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 %}
注意:我不知道您为什么要尝试将“发布”模型对象发送到模板。但我仍然把它保存在代码中。