繁体   English   中英

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

[英]How to pass object_id to generic view object_detail in Django

我正在使用django.views.generic.list_detail.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变量。

谢谢

我先解决你的第二个问题。 ? 在此上下文中,字符用于表示正则表达式中的命名组。 这是Python提供的正则表达式的自定义扩展。 (有关示例,请参见howto

要传递object_id请将其附加到URL(以您的情况object_id )。 像这样: ../foo/app/3 3其中3object_id

该urlconf告诉Django将.../1.../123类型的URL映射到给定的视图( ...是该urlconf的前缀)。 (?P<object_id>\\d+)告诉django将\\d+捕获的值分配给变量object_id 另请参阅有关正则表达式的 Python文档和有关URL调度程序的 django文档。

首先,字符串前的“ r”表示它是正则表达式,^表示字符串的开头,$表示字符串的结尾。 在python中,当您放置(?P<'something>a_regular_expression) python会在该字符串中找到与a_regular_expression相匹配的表达式,并将其作为名称为some的变量返回。 此处\\ d +表示数字,它将找到一个数字并将其传递给您在其中分配的名称为object_id的函数(article_info)。

其次,您不必担心GET网址,只需设置主网址即可,而django将自己管理GET变量。 例如,如果您的网址格式中包含(r'^/post/$, my_app.views.show_post)并发送此get请求../post/?id=10 ,则django将使用my_app.views.show_post函数并且您可以访问request.GET中的get变量,在这里,如果要获取id,则可以使用此request.GET[id]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM