所以我试图链接模板,我可以编辑这样的帖子:
<a href="{% url 'blog:post_update' pk=post.pk %}">Edit</a>
但是给了我这个错误:
Reverse for 'eintrag_update' with arguments '()' and keyword arguments '{u'pk': 63L}' not found. 1 pattern(s) tried: [u'gaestebuch/(?P<id>[0-9]+)/edit/$']
但是我可以在没有错误的情况下访问这样的模板:/ blog /(id)/ edit
此模板上的每个其他链接都有效,例如我旁边有一个链接:
<a href="{% url 'blog:delete_post' pk=post.pk %}">Delete</a>
哪种效果很好。
这是我的观点:
def post_update(request, id=None):
instance = get_object_or_404(Post, id=id)
form = PostForm(request.POST or None, request.FILES or None, instance = instance)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
return HttpResponseRedirect(instance.get_absolute_url())
context = {
"title": instance.title,
"instance": instance,
"form":form,
}
return render(request, "blog/write.html", context)
这是我的网址:
url(r'^(?P<id>[0-9]+)/edit/$', views.post_update, name='post_update'),
这是我的模特:
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
title = models.CharField(max_length=200)
content = models.TextField()
如果有人可以帮助我,我会很高兴的!
答案 0 :(得分:2)
url模式中的关键字参数必须与url标记中的关键字参数匹配。
您使用的是关键字参数pk
<a href="{% url 'blog:post_update' pk=post.pk %}">Edit</a>
因此,您也应该在网址模式中使用pk
。目前您正在使用id
。
url(r'^(?P<pk>[0-9]+)/edit/$', views.post_update, name='post_update'),
这意味着您可能还需要更新视图,例如:
def post_update(request, pk):
post = get_object_or_404(Post, pk=pk)
...
您可以保留视图和网址格式,并将网址标记更改为使用id
。但是,我建议使用pk
,因为这是Django在基于类的视图中使用的。
另一种选择是在url标记中使用args而不是kwargs。
{% url 'blog:post_update' post.pk %}