我正在django中建立一个简单的社交网络。
在我的社交圈的“家”中,我具有所有用户发布的所有帖子的列表,以及作者和发布日期。在已登录用户的每个帖子下,都会出现一个“删除”按钮。如果用户单击它,它将返回该帖子的特定视图,并显示“您是否真的希望删除此帖子?”之类的消息。
但是,当我单击它时,代码返回此错误:
/ posts / delete / 7 /处的NoReverseMatch
反向为'single',没有找到参数。尝试了1种模式:['posts / by /(?P [-\ w] +)/(?P \ d +)/ $']
为什么它说没有单个参数的'single'无法得到相反的结果,而在模板中的delete按钮具有指向'delete'视图功能的链接?
这是我的urls.py,在urlpatterns内:
url(r'^$',
views.PostList.as_view(),
name='all'),
url(r'new/$',
views.CreatePost.as_view(),
name='create'),
url(r'by/(?P<username>[-\w]+)/$',
views.UserPosts.as_view(),
name='for_user'),
url(r'by/(?P<username>[-\w]+)/(?P<pk>\d+)/$',
views.PostDetail.as_view(),
name='single'),
url(r'delete/(?P<pk>\d+)/$',
views.DeletePost.as_view(),
name='delete'),
这是我的views.py:
class DeletePost(LoginRequiredMixin, SelectRelatedMixin, generic.DeleteView):
model = models.Post
select_related = ('user', 'group')
success_url = reverse_lazy('posts:all')
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user_id = self.request.user.id)
def delete(self,*args,**kwargs):
messages.success(self.request,'Post Deleted')
return super().delete(*args,**kwargs)
这是我的模板,显示出“ delee”按钮:
{% if user.is_authenticated and post.user.username == user.username %}
<a href="{% url 'posts:delete' pk=post.pk %}" title="delete" class="btn btn-simple">
<span class="glyphicon glyphicon-remove text-danger" aria-hidden="true"></span>
<span class="text-danger icon-label">Delete</span>
</a>
{% endif %}
编辑:
这是我显示帖子的模板,并询问用户他/她是否真的要删除它:
<h3>Do you want to delete this post?</h3>
<div class="posts">
{% include "posts/_post.html" with post=object hide_delete=True %}
</div>
<form class="POST">
{% csrf_token %}
<input type="submit" value="Confirm Delete" class="btn btn-danger btn-large">
<a href="{% url 'posts:single' username=user.username pk=object.pk %}"
class="btn btn-simple btn-large btn-default">Cancel</a>
</form>
[模型User
是Django的默认models.User
注意:我以前遇到过与使用正则表达式相关的类似错误。可以找到更多详细信息in this other question。
我在显示删除按钮的模板部分中寻找错误,但它在模板中撒谎,询问用户是否要删除帖子。
在代码段中:
<h3>Do you want to delete this post?</h3>
<div class="posts">
{% include "posts/_post.html" with post=object hide_delete=True %}
</div>
<form class="POST">
{% csrf_token %}
<input type="submit" value="Confirm Delete" class="btn btn-danger btn-large">
<a href="{% url 'posts:single' %} username=user.username pk=object.pk %}"
class="btn btn-simple btn-large btn-default">Cancel</a>
</form>
我已替换
<a href="{% url 'posts:single' %} username=user.username pk=object.pk %}"
with:
<a href="{% url 'posts:delete' pk=post.pk %}"
现在终于把我带到帖子删除确认视图