无法获得社交网络项目中帖子的DeleteView

问题描述 投票:0回答:1

我正在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

django regex django-views django-urls django-generic-views
1个回答
0
投票

我在显示删除按钮的模板部分中寻找错误,但它在模板中撒谎,询问用户是否要删除帖子。

在代码段中:

<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 %}"

现在终于把我带到帖子删除确认视图

© www.soinside.com 2019 - 2024. All rights reserved.