Python Django分页-如何重定向回ListView和页码

Python Django分页-如何重定向回ListView和页码,python,django,Python,Django,在列表视图中我使用带有paginate_by=5的分页器呈现表格。 在每一行中,我都有一个按钮,可以打开UpdateView。 成功更新后,我将返回我的列表视图,但总是在第一页。 如何更改success\u url,使我回到打开UpdateView的页码? Django有没有合适的方法来解决这个问题 #views.py class Orders_list(ListView): model = Order context_object_name = "orders" qu

列表视图中
我使用带有
paginate_by=5的分页器呈现表格。
在每一行中,我都有一个按钮,可以打开
UpdateView
。 成功更新后,我将返回我的
列表视图
,但总是在第一页。 如何更改
success\u url
,使我回到打开
UpdateView
的页码? Django有没有合适的方法来解决这个问题

#views.py

class Orders_list(ListView):
    model = Order
    context_object_name = "orders"
    queryset = Order.objects.all()
    paginate_by = 5
    template_name = "orders/orders_list.html"

#http://127.0.0.1:8000/orders/?page=4


class Orders_update(UpdateView):
    model = Order
    form_class = Order_UpdateForm
    template_name = "orders/orders_update.html"
    #success_url = '../../../orders/'
    success_url = reverse_lazy('orders')


#urls.py

urlpatterns = [
    url(r'^orders/$', Orders_list.as_view()),
    url(r'^orders/detail/(?P<pk>\d+)/$', Orders_detail.as_view()),
]


#forms.py

class Order_UpdateForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = ['order_text', 'customer', 'cyclist']

    def __init__(self, *args, **kwargs):
        super(Order_UpdateForm, self).__init__(*args, **kwargs)
        self.fields['cyclist'].queryset = Cyclist.objects.filter(active=True)


#models.py

class Order(models.Model):
    customer = models.ForeignKey('Customer')
    cyclist = models.ForeignKey('Cyclist')
    order_text = models.CharField(max_length=200)
    pick_up = models.CharField(max_length=200)
    destination = models.CharField(max_length=200)
    created_date = models.DateTimeField(default=timezone.now)
    changed_date = models.DateTimeField(blank=True, null=True)

    def created(self):
        self.changed_date = timezone.now()
        self.save()

    def __str__(self):
        return self.order_text


class Customer(models.Model):
    company_name = models.CharField(max_length=200)
    created_date = models.DateTimeField(default=timezone.now)
    changed_date = models.DateTimeField(blank=True, null=True)

    def created(self):
        self.changed_date = timezone.now()
        self.save()

    def __str__(self): return self.company_name


class Cyclist(models.Model):
    lastname = models.CharField(max_length=20)
    firstname = models.CharField(max_length=20)
    created_date = models.DateTimeField(default=timezone.now)
    changed_date = models.DateTimeField(blank=True, null=True)
    active = models.BooleanField(default=True)

    def created(self):
        self.changed_date = timezone.now()
        self.save()

    def __str__(self):
        return self.lastname
…然后在视图中,我重写了
get\u context\u data
方法

#views.py

class Orders_update(UpdateView):
    model = Order
    form_class = Order_UpdateForm
    template_name = "orders/orders_update.html"
    page = "1" # Assigned

    def get_context_data(self, **kwargs):
        context = super(Orders_update, self).get_context_data(**kwargs)
        page = self.request.GET.get('page') # Modified
        return context

    success_url = '../../../orders/?page=' + str(page) # Should be used here to redirect to a specific page on a ListView
…但是现在…我如何访问
success\u url
views.py
中的变量
page

我认为这是一个非常基本的东西(希望如此),我想我不明白scope在Python中是如何工作的。

这就是最终对我有用的东西。基本上,我只是重写了
get\u success\u url
,以便从请求中访问
页面
参数

class Orders_update(UpdateView):
    model = Order
    form_class = Order_UpdateForm
    template_name = "orders/orders_update.html"

    def get_success_url(self):
        global page
        page = self.request.GET.get('page')
        return reverse_lazy('orders')

我更新了我的问题,查看views.py。ListView没有success\u url属性或get\u success\u url()方法。因此,您可以覆盖
render_to_response(self,context,**response_kwargs)
,然后在url中提供一个HttpResponseRedirect,您还可以提供上下文数据
class Orders_update(UpdateView):
    model = Order
    form_class = Order_UpdateForm
    template_name = "orders/orders_update.html"

    def get_success_url(self):
        global page
        page = self.request.GET.get('page')
        return reverse_lazy('orders')