关于django动态URL获取值的问题

djangobook里面有这么一个例子:“一个动态URL,(r*^time/plus/(\d{1,2})/$*,hours_ahead),对应的hours_ahead视图... django book 里面有这么一个例子:“ 一个动态URL,(r*^time/plus/(\d{1,2})/$*,hours_ahead),
对应的hours_ahead视图是这样的"def hours_ahead(request,offset)"这个offset就能直接获取URL里正则表达那部分的值,这是为什么?是django的功能吗?求指教,谢谢~
展开
 我来答
heavensend
2014-08-04 · TA获得超过693个赞
知道小有建树答主
回答量:252
采纳率:95%
帮助的人:162万
展开全部
理解成调用函数就可以了,url里捕获的内容当做参数传递给hours_ahead函数,渲染模板后返回。
追问
谢谢,不过我想知道原理是怎么样的,因为直观的从代码看,完全看不出是怎么传参的。def hours_ahead(request,offset),第二个参数怎么就只能获取到值了呢=。=
追答

关于urlconf的实现过程,你需要看一下django/core/urlresolvers.py里面的代码

RegexURLPattern类里面的resolve函数就是你要找的答案

    def resolve(self, path):
        match = self.regex.search(path)
        if match:
            # If there are any named groups, use those as kwargs, ignoring
            # non-named groups. Otherwise, pass all non-named arguments as
            # positional arguments.
            kwargs = match.groupdict()
            if kwargs:
                args = ()
            else:
                args = match.groups()
            # In both cases, pass any extra_kwargs as **kwargs.
            kwargs.update(self.default_args)

            return ResolverMatch(self.callback, args, kwargs, self.name)

你代码里的d{1,2})在这里用的正则的捕获方式,也就是args = match.groups()这里得到的,如果是命名捕获,那么就是kwargs = match.groupdict()这里了

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式