首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >重定向管理网站

重定向管理网站
EN

Stack Overflow用户
提问于 2009-10-07 15:22:56
回答 3查看 4.9K关注 0票数 5

我有一个名为CMS与类别和文章的应用。很简单。

我覆盖app_index.html来启用基于ajax的拖放排序,并将文章从一个类别移到另一个类别。

现在,我想在保存/删除一篇文章或一个类别之后,重定向到cms的app_index.html,而不是模型的change_list.html。这是如何做到的呢?

谢谢

代码语言:javascript
复制
class Category(models.Model):
    order = models.IntegerField()
    title = models.CharField(max_length=100)
    text  = models.TextField()

class Article(models.Model):
    published  = models.BooleanField(default=None)
    images     = generic.GenericRelation(Photo)
    category = models.ForeignKey(Category)
    title = models.CharField(max_length=100)
    text  = models.TextField()
    order = models.IntegerField(blank = True, null = True)

丹尼尔的回答完成了一半的工作:在更改文章和类别之后重定向。

一个不太优雅的解决方案:在urls.py中重定向

代码语言:javascript
复制
def redirect_cms(response):
    return HttpResponseRedirect('/admin/cms/')

urlpatterns += patterns('',
    (r'^admin/cms/article/$',redirect_cms),

还有别的主意吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-10-07 15:55:25

admin子类中,重写response_change和/或response_add方法。在分别为现有实例和新实例保存管理表单后调用这些实例,并负责返回当前将您带到change_list页面的change_list。

看看django.contrib.admin.options中的原始代码,看看您需要做什么。

编辑:删除可以通过两种方式进行:由于change_list页面上的操作,在这种情况下,您可以使用response_action方法;或者由于更改表单上的删除,不幸的是没有等效的方法。处理此问题的一种方法可能是重写应用程序的change_form.html模板,并删除删除链接,因此删除的唯一方法是通过变更列表。一点也不理想。

票数 10
EN

Stack Overflow用户

发布于 2013-12-10 09:34:17

问题已得到解答,但删除后重定向的问题未予解决。也许下面的解决方案会对某些人有帮助。Django的ModelAdmin类具有delete_view成员函数。它做了两件事:

  1. 如果未定义POST,则显示删除确认页。如果确认并单击“删除”,它将生成一个POST请求。
  2. 由于现在定义了POST,视图将删除请求的项,并将一个HttpResponseRedirect返回给变更列表(如果用户没有更改权限,则返回管理索引)。

因此,让我们按照以下方式重写它。

代码语言:javascript
复制
from django.http import HttpResponseRedirect

class MyAdmin(admin.ModelAdmin):
    def delete_view(self, request, object_id, extra_context=None):
        """Redirect to website index page on delete."""

        response = super(MyAdmin, self).delete_view(request, object_id, extra_context)

        # Use our own redirect
        if isinstance(response, HttpResponseRedirect):
            return HttpResponseRedirect('/') # Any URL here

        return response

它似乎在Django 1.6下为我工作。

票数 5
EN

Stack Overflow用户

发布于 2014-06-16 05:33:28

在Django 1.7中,有一个可以覆盖管理对象的response_delete方法。请参阅这里

代码语言:javascript
复制
class MyAdmin(admin.ModelAdmin):

    def response_delete(self, request, obj_display):
        return HttpResponseRedirect("my_url")
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1532324

复制
相关文章

相似问题

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