Django 1.9 在基于 class 的视图中获取 kwargs
Django 1.9 get kwargs in class based view
我想知道是否有办法直接在基于 class 的视图中获取 kwargs。我知道这可以在 class 内的函数中完成,但是我在尝试这个时遇到了问题:
views.py
class EmployeesUpdateStudies(UpdateView):
form_class = form_ES
model = EmployeePersonal
template_name = 'employeesControll/employees_studies_update_form.html'
success_url = reverse('employee-details', kwargs={'pk': kwargs.get('pk')})
我的url如下
url(r'^employees/detalles/(?P<pk>[0-9]+)/$', login_required(views.EmployeeDetails.as_view()), name='employee-details')
你不能在success_url
中使用kwargs
,因为当Django在服务器启动时加载class时,它无法访问请求。改写 get_success_url
方法。
def get_success_url(self)
return reverse('employee-details', kwargs={'pk': self.kwargs['pk']})
Alasdair 的回答解决了您的问题。但是,您可以为 EmployeePersonal
模型定义一个 get_absolute_url
方法,它将作为您视图的 success_url
:
You don’t even need to provide a success_url
for CreateView
or
UpdateView
- they will use get_absolute_url()
on the model object
if available.
您将在模型对象主键的 get_absolute_url
方法中使用 self.id
。
参考:
我想知道是否有办法直接在基于 class 的视图中获取 kwargs。我知道这可以在 class 内的函数中完成,但是我在尝试这个时遇到了问题:
views.py
class EmployeesUpdateStudies(UpdateView):
form_class = form_ES
model = EmployeePersonal
template_name = 'employeesControll/employees_studies_update_form.html'
success_url = reverse('employee-details', kwargs={'pk': kwargs.get('pk')})
我的url如下
url(r'^employees/detalles/(?P<pk>[0-9]+)/$', login_required(views.EmployeeDetails.as_view()), name='employee-details')
你不能在success_url
中使用kwargs
,因为当Django在服务器启动时加载class时,它无法访问请求。改写 get_success_url
方法。
def get_success_url(self)
return reverse('employee-details', kwargs={'pk': self.kwargs['pk']})
Alasdair 的回答解决了您的问题。但是,您可以为 EmployeePersonal
模型定义一个 get_absolute_url
方法,它将作为您视图的 success_url
:
You don’t even need to provide a
success_url
forCreateView
orUpdateView
- they will useget_absolute_url()
on the model object if available.
您将在模型对象主键的 get_absolute_url
方法中使用 self.id
。
参考: