在 django 管理面板中重定向不正确
Redirecting is not properly in django admin panel
我有一个方法可以在管理面板中重定向页面:
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)
请提示哪里可能是错误的代码。
您的浏览器显示的错误消息表明您的网站陷入了无限重定向循环。看看你的情况,原因就很清楚了:
if not request.method != 'GET':
相当于
if request.method == 'GET':
重定向总是导致 GET
请求,因此您的视图将一次又一次地重定向...
我假设您真正想要实现的是仅在没有 URL 参数时才重定向。这些存储在 request.GET
中,因此您的条件将如下所示:
if not request.GET:
如果您总是想限制显示的事件,覆盖 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)
我有一个方法可以在管理面板中重定向页面:
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)
请提示哪里可能是错误的代码。
您的浏览器显示的错误消息表明您的网站陷入了无限重定向循环。看看你的情况,原因就很清楚了:
if not request.method != 'GET':
相当于
if request.method == 'GET':
重定向总是导致 GET
请求,因此您的视图将一次又一次地重定向...
我假设您真正想要实现的是仅在没有 URL 参数时才重定向。这些存储在 request.GET
中,因此您的条件将如下所示:
if not request.GET:
如果您总是想限制显示的事件,覆盖 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)