首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新后重定向到同一视图,删除Django中的

更新后重定向到同一视图,删除Django中的
EN

Stack Overflow用户
提问于 2017-05-05 13:15:56
回答 1查看 2.7K关注 0票数 0

在删除对象并传递一些成功消息之后,如何重定向到相同的视图?

html:

代码语言:javascript
复制
<form action="{% url 'lamp-delete' lamp.id %}" method="post" style="display: inline;">
                        {% csrf_token %}
                        <input type="hidden" name="product_id" value="{{ lamp.id }}" />
                        <button type="submit" class="btn btn-outline-danger btn-sm">
                            <i class="fa fa-trash" aria-hidden="true"></i>
                        </button>
                    </form>

views.py

代码语言:javascript
复制
 def index(request):
    lamps = Lamp.objects.all()
    return render(request, 'index.html', {'lamps': lamps})


def productlist(request, categ):
    MEDIA_URL = settings.MEDIA_URL
    lamps = Lamp.objects.filter(category=categ)
    return render(request, 'productlist.html', {'lamps': lamps, 'MEDIA_URL': MEDIA_URL})


class LampDelete(DeleteView):
    model = Lamp
    success_url = reverse_lazy('index')

urls.py

代码语言:javascript
复制
urlpatterns =[
    url(r'^$', views.index, name='index'),
    url(r'^productlist/([a-z0-9]+)/$', views.productlist, name='productlist'),
    url(r'^accounts/', include('allauth.urls')),
    url(r'productlist/(?P<pk>[0-9]+)/delete/$', views.LampDelete.as_view(), name='lamp-delete'),
]

我正在使用django.views.generic.edit,在成功地使用reverse_lazy删除项之后,我可以重定向到静态页面,但是我试图重载现有的模型,并将一些带有字符串的变量传递给这个视图'productlist‘。如果有人能举个例子,我会非常感激的。

EN

回答 1

Stack Overflow用户

发布于 2017-05-05 13:26:43

对于基于类的视图,基于类的高级视图是一个很好的资源。查看https://ccbv.co.uk/projects/Django/1.10/django.views.generic.edit/DeleteView/,您可以看到有一个.get_success_url()方法,在其中您还可以访问self.request以传递某种变量。

然而,对于简单的成功消息,我想看一下Django的消息框架

代码语言:javascript
复制
from django.contrib import messages


class LampDelete(DeleteView):
    model = Lamp
    success_url = reverse_lazy('index')

    def delete(self, request, *args, **kwargs):
        obj = self.get_object()
        messages.success(request, '{} was deleted'.format(obj.name))
        return super(LampDelete, self).delete(request, *args, **kwargs)

然后在模板中:

代码语言:javascript
复制
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

(这只是Django文档中的逐字示例)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43805974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档