如何将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
其中3
是object_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