【问题标题】:deleting objects, going from ListView to DeleteView删除对象,从 ListView 到 DeleteView
【发布时间】:2018-08-14 19:56:44
【问题描述】:

我有一个 ListView,我想从中使用 DeleteView 删除一些对象。到目前为止我所拥有的:

views.py

class BlockListView(ListView):
    model= Classroom

    def get_context_data(self, **kwargs):
        context = super(BlockListView, self).get_context_data(**kwargs)
        classroom_blocks = Classroom.objects.all()
        context = {'classroom_blocks': classroom_blocks}
        return context

list_classroom_view = BlockListView.as_view()

class BlockDeleteView(DeleteView):
    model = Classroom
    success_url = reverse_lazy('classroom:blocklist')

delete_classroom_view = BlockDeleteView.as_view()

urls.py

urlpatterns = [
    path(r'^$', views.index, name='index'),
    path('submitted', views.submitted, name='submitted'),
    path('classup/', create_classroom_view, name='classroom'),
    path('block/', views.block, name='block'),
    path('blocklist/', list_classroom_view, name='blocklist'),
    path(r'^(?P<pk>\d+)/blockDelete/$', delete_classroom_view, name='blockDelete'),
]

列表视图模板:

{% for block in classroom_blocks %}
    <li>{{ block.get_course_block_display }}<a href ="{% url 'classroom:blockDelete' block.id %}" class="button" style="color:#999999">DELETE</a></li>
{% empty %}
    <li>No classes set up yet.</li>
{% endfor %}

确认删除模板:

{% block body %}
<h1>Confirm Delete</h1>
<form action="." method="post">{% csrf_token %}
    <p>Are you sure you want to delete "{{ object.course_block }}"?</p>
    <input type="submit" value="Confirm" />
</form>
{% endblock %}

单击列表视图中的删除按钮后,生成的 url 为http://127.0.0.1:8000/classroom/%5E(%3FP89%5Cd+)/blockDelete/$,这指向确认删除页面。确认删除后,我收到Request URL: http://127.0.0.1:8000/classroom/%5E(%3FP89%5Cd+)/blockDelete/ 的 404 错误

【问题讨论】:

    标签: django django-views


    【解决方案1】:

    您使用的是path(),因此您不应该使用正则表达式。将第一个和最后一个 URL 模式更改为:

    path('', views.index, name='index'),
    ...
    path('<int:pk>/blockDelete/', delete_classroom_view, name='blockDelete'),
    

    现在,当您从列表视图中单击删除按钮时,您应该会被带到像 /classroom/1/blockDelete/ 这样的网址,并且您在提交表单时不应该收到 404。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多