I've been using this format the most in barbican:
"{0}/{1}?limit=100".format(self._tenant, self.SECRETS_PATH)

I'd suggest using that format. 

Now for client-facing strings like response messages, I've been using this format:
_("{0}/{1}?limit=100").format(self._tenant, self.SECRETS_PATH)

This requires the following import:
from barbican.openstack.common.gettextutils import _

The advantage I see of the numbered curly over the empty curly ({}) is that some languages might need to reorder the slotted words in the generated string (i.e. so {1} might come before {0} in the other language's text).