在我的Pylons应用中,某些内容位于看起来像http://mysite/data/31415的网址上。用户可以直接转到该URL,或通过搜索页面搜索“31415”。但是,我的约束意味着http://mysite/data/000031415应该转到与上面相同的页面,就像搜索“0000000000031415”一样。我可以在Routes本身中从该字符串中删除前导零,或者我是否需要在控制器文件中进行该替换?如果可以在routing.py中进行,我宁愿在那里做 - 但我无法从我正在阅读的文档中找到它。
答案 0 :(得分:1)
您实际上可以通过conditional functions执行此操作,因为它们允许您从URL修改变量。
答案 1 :(得分:0)
我知道我通过引入不同的路由库作弊,因为我没有使用Routes
,但是这是如何使用Werkzeug
的路由包完成的。它允许您指定路径的给定片段是整数。如果你想解析更有趣的东西(例如UUID),你也可以通过继承werkzeug.routing.BaseConverter
来实现更专业的“转换器”。
也许,Routes
有一个类似的机制来满足专门的路径片段解析需求。
import unittest
from werkzeug.routing import Map, Rule
class RoutingWithInts(unittest.TestCase):
m = Map([Rule('/data/<int:record_locator>', endpoint='data_getter')])
def test_without_leading_zeros(self):
urls = self.m.bind('localhost')
endpoint, urlvars = urls.match('/data/31415')
self.assertEquals({'record_locator': 31415}, urlvars)
def test_with_leading_zeros(self):
urls = self.m.bind('localhost')
endpoint, urlvars = urls.match('/data/000031415')
self.assertEquals({'record_locator': 31415}, urlvars)
unittest.main()