Python 从Django视图类中的URL访问主键
我有一个URL模式映射到Django应用程序中的自定义视图类,如下所示:Python 从Django视图类中的URL访问主键,python,django,url-routing,Python,Django,Url Routing,我有一个URL模式映射到Django应用程序中的自定义视图类,如下所示: url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( )) url(r'^run/(?P\d+/$),views.PerfRunView.as_view()) 问题是,我不知道如何从我的视图类中的URL模式字符串访问“pk”,以便根据其数据库id检索特定的模型对象。我在谷歌上搜索了Django文档,搜索了堆栈溢出,但我根本找不到满意的答案 有人能告诉我
url( r'^run/(?P<pk>\d+)/$', views.PerfRunView.as_view( ))
url(r'^run/(?P\d+/$),views.PerfRunView.as_view())
问题是,我不知道如何从我的视图类中的URL模式字符串访问“pk”,以便根据其数据库id检索特定的模型对象。我在谷歌上搜索了Django文档,搜索了堆栈溢出,但我根本找不到满意的答案
有人能告诉我吗?在基于类的视图中,URL中的所有元素都放在
self.args
(如果它们是非命名组)或self.kwargs
(用于命名组)中。因此,对于您的视图,您可以使用self.kwargs['pk']
访问视图中的主键
职位=
这是一个基于django restframework的示例,用于使用url中的pk检索对象: views.py
class ContactListView(generics.ListAPIView):
queryset = Profile.objects.all()
serializer_class = UserContactListSerializer
def get(self, request, pk, *args, **kwargs):
contacts = Profile.objects.get(pk=pk)
serializer = UserContactListSerializer(contacts)
return Response(serializer.data)
url.py
url(r'^contact_list/(?P<pk>\d+)/$', ContactListView.as_view())
url(r'^contact\u list/(?P\d+/$),ContactListView.as\u view())
这有帮助吗?请阅读第二条。@Ankur Gupta感谢您提供的链接,但我仍然不完全清楚。这是self.kwargs的一部分吗?我以为我已经掌握了Django的窍门,直到我进入了基于类的视图。我完全不理解它们。@luke基于类的视图只是一个抽象,我觉得它很烦人,并且坚持使用函数。我认为他们帮不了什么忙。没有必要,你需要使用它。对URL使用简单的函数也很好。我现在已经对它进行了排序。我甚至对Django视图类的工作方式也有了更好的理解。谢谢
url(r'^contact_list/(?P<pk>\d+)/$', ContactListView.as_view())