django管理面板中的重定向不正确

时间:2018-06-12 07:20:00

标签: python django redirect admin url-redirection

我有一个方法,其任务是在管理面板中重定向页面:

http://127.0.0.1:8000/admin/events/event/

为:

http://127.0.0.1:8000/admin/events/event/?date__lt=2018-6-11

我收到的信息不是页面:

The page isn’t redirecting properly

这是我的代码: admin.py

第一版代码:

def changelist_view(self, request, extra_context=None):
    if not request.method != 'GET':
        url = '{}?date__lt={}'.format(reverse('admin:events_event_changelist'), date.today())
        return HttpResponseRedirect(url)
编辑后

代码

def changelist_view(self, request, extra_context=None):
    q = request.GET.get('date')
    if not q:
        url = '{}?date__lt={}'.format(reverse('admin:events_event_changelist'), date.today())
        return HttpResponseRedirect(url)

请提示一下可能出错的代码。

2 个答案:

答案 0 :(得分:1)

您的浏览器显示的错误消息表明您的网站陷入无限重定向循环。看看你的情况,很明显为什么:

if not request.method != 'GET':

相当于

if request.method == 'GET':

重定向始终会产生GET请求,因此您的视图会一次又一次地重定向...

我假设您实际想要实现的是仅在没有URL参数的情况下重定向。这些存储在request.GET中,因此您的情况将如下所示:

if not request.GET:

答案 1 :(得分:1)

如果您始终要限制显示的事件,则可能更容易覆盖get_queryset方法而不是重定向。

class EventAdmin(admin.modelAdmin):
    def get_queryset(self, request):
        qs = super(EventAdmin, self).get_queryset(request)
        if request.user.is_superuser:
            # Allow superusers to see all events
            return qs
        else:
            return qs.filter(date__lt=date.today())

admin.site.register(Event, EventAdmin)