在基于类的视图中获取kwargs的最佳方法?

时间:2013-11-24 20:45:12

标签: python django

我有一个基于类的Django视图:

class LocationView(TemplateView):

我在我的网址调度程序中定义了一个命名参数:

url(r'^locations/(?P<id>\d+)/$', LocationView.as_view(), name="location")

我知道我可以在像id这样的类方法中访问我的get_context_data参数,在那里我可以将** kwargs传递给方法本身。但是,我有点想能够在类本身中访问参数,因为我从API中获取了一些数据,这些数据将在整个类中以不同的方式用于不同的容量。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:3)

您可以在为基于类的视图调用dispatch()之后运行的任何方法中执行self.kwargs

如果你正在为一个模型做一个详细视图,就好像你正在做的那样,你应该使用一个基于通用类的视图来为你做这个。

为什么不尝试以下方法:

from django.views.generic import DetailView

class LocationView(DetailView):
  queryset = LocationModel.objects.all()
  template_name = 'location_of_detail_template.html'

然后更新您的urls.py文件并将正则表达式组的名称从id更改为pk,以使其全部自动运行。