如何将object_id传递给Django中的通用视图object_detail

我使用的是django.views.generic.list_detail.object_detail。如何将object_id传递给Django中的通用视图object_detail

根据文档视图采用变量object_id。为此,我将以下内容添加到了我的urlconf中:

(r'^(?P<object_id>\d+)$', list_detail.object_detail, article_info), 

上述行位于主要urlconf中包含的单独urlconf中。

如果我离开的字符“^”在模式的开头,然后尝试去地址:

.../OBJECT_ID = 1

它不工作。如果我删除 '^' 字符地址:

.../OBJECT_ID = 1

还不行。然而,如果我使用:

... /的object_id = 1(没有问号)

视图接受的object_id变量和没有问题的工作原理。我对此有两个问题。

第一:可以使用包含的urlconf中的'^'字符来限制模式只匹配基本url模式加上包含的urlconf中的^ $之间的确切字符串吗?

第二:为什么问号字符会停止接收'object_id'变量的视图?我以为'?'被用来指定URL中的GET变量。

感谢

回答:

我会先解决你的第二个问题。此上下文中的?字符用于表示正则表达式中的已命名组。这是regular expressions provided by Python的自定义扩展。 (请参阅howto的示例)

要通过object_id将其追加到URL(在您的情况下)。像这样:../foo/app/3其中3object_id

回答:

那的URLconf告诉Django映射那种.../1.../123给定的视图(...在于URLconf中的前缀)的网址。 (?P<object_id>\d+)告诉django将\d+捕获的值分配给变量object_id。另请参阅Python的文档regular expressions和django的文档URL dispatcher。

回答:

首先,字符串前的“r”表示它是一个正则表达式,^表示字符串的开始,$表示字符串的结尾。在Python中,当你把(?P<'something>a_regular_expression) python会找到你匹配的表达式为该字符串中的a_regular_expression,并返回它作为变量与名称:东西。这里\ d +表示数字,它会找到一个数字,并通过object_id的名称将它传递给您在那里指定的函数(article_info)。

第二,你不应该担心GET网址,你只需设置主网址,而django会自己管理GET变量。例如,如果您的url模式中有(r'^/post/$, my_app.views.show_post),并且您发送此获取请求../post/?id=10,则django将使用您的my_app.views.show_post函数,并且您可以访问request.GET中的get变量,如果要获取id,则可以使用此request.GET[id]

以上是 如何将object_id传递给Django中的通用视图object_detail 的全部内容, 来源链接: utcz.com/qa/260993.html

回到顶部