【发布时间】:2019-12-27 21:42:58
【问题描述】:
我的博客可以发帖。我想要一个可以更新/编辑博客的功能,当我尝试实现该功能时,我遇到了以下错误;
NoReverseMatch at /post/1/ Reverse for 'post_edit' with arguments '('',)' 未找到。尝试了 1 种模式:['post/(?P[0-9]+)/edit/$']
我知道是哪条线路导致了问题:
/post_detail.html
<a href="{% url 'post_edit' post.pk %}"> +Edit Blog Post</a>
没有顶部的行,我没有错误。我只是一个学习 Django 的初学者,我无法理解为什么这不起作用。我正在关注的教程中建议使用它。
/urls.py
urlpatterns = [
path('post/<int:pk>/edit/', BlogUpdateView.as_view(), name='post_edit'), # new
path('post/new/', BlogCreateView.as_view(), name='post_new'),
path('post/<int:pk>/', BlogDetailView.as_view(), name='post_detail'),
path('', BlogListView.as_view(), name='home'),
]
/post_detail.html
{% extends 'base.html' %}
{% block content %}
<div class="post-entry">
<h2>
{{ my_posts.title }}
</h2>
<p>
{{ my_posts.body }}
</p>
</div>
<a href="{% url 'post_edit' post.pk %}"> +Edit Blog Post</a>
{% endblock content %}
views.py
class BlogListView(ListView):
model = Post
template_name = 'home.html'
class BlogDetailView(DeleteView):
model = Post
context_object_name = 'my_posts'
template_name = 'post_detail.html'
class BlogCreateView(CreateView):
model = Post
template_name = 'post_new.html'
fields = '__all__'
class BlogUpdateView(UpdateView):
model = Post
template_name = 'post_edit.html'
fields = ['title', 'body']
/models.py
class Post(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(
'auth.User',
on_delete=models.CASCADE,
)
body = models.TextField()
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post_detail', args=[str(self.id)])
【问题讨论】:
-
试试这个 +编辑博文
-
"{% url 'post_edit' my_posts.pk %}"而不是"{% url 'post_edit' post.pk %}"。 -
谢谢你,Willem,添加你的评论作为答案,我把它标记为正确。我不敢相信我忘记了我重新分配了它
-
context_object_name是'my_posts',而不是'post'。 -
与DRF无关的请不要提及
标签: python django django-models jinja2