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

问题描述:

所以我要连结的模板,我可以编辑帖子是这样的:如何在django中将编辑页面链接到我的详细信息页面?

<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/$'] 

但我可以接触到这样的模板没有一个错误:/博客/(ID)/编辑

此模板每隔链接工作,比如我有一个链接就在旁边像这样:

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

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

+2

将'eintrag'翻译成'post'的危险是你可能会隐藏错误!在这种情况下,我想我已经发现了这个问题。 – Alasdair

+0

是的,我试图让它更容易理解。并且非常感谢您的帮助! – Dannad

url模式中的关键字参数必须与url标记中的关键字参数匹配。

您正在使用关键字参数pk

<a href="{% url 'blog:post_update' pk=post.pk %}">Edit</a> 

所以,你应该用你的URL模式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) 
    ... 

,因为它们是你可以离开视图和URL模式,并更改网址标签使用id代替。不过,我建议使用pk,因为这是Django在基于类的视图中使用的。

另一种选择是在url标记中使用args而不是kwargs。

{% url 'blog:post_update' post.pk %} 
+0

非常感谢,再次为您提供帮助! – Dannad