关于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的功能吗?求指教,谢谢~ 展开
对应的hours_ahead视图是这样的"def hours_ahead(request,offset)"这个offset就能直接获取URL里正则表达那部分的值,这是为什么?是django的功能吗?求指教,谢谢~ 展开
1个回答
展开全部
理解成调用函数就可以了,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()这里了
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询