如何将编辑页面链接到django中的详细信息页面?

时间:2016-03-21 15:21:52

标签: django django-templates

所以我试图链接模板,我可以编辑这样的帖子:

<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()

如果有人可以帮助我,我会很高兴的!

1 个答案:

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