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')