Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在路由中使用正则表达式替换重写URL_Python_Routes_Pylons - Fatal编程技术网

Python 在路由中使用正则表达式替换重写URL

Python 在路由中使用正则表达式替换重写URL,python,routes,pylons,Python,Routes,Pylons,在my Pylons应用程序中,有些内容位于类似的URL上。用户可以直接访问该URL,或通过搜索页面搜索“31415”。然而,我的约束意味着应该转到与上面相同的页面,搜索“0000000000031415”。我可以在路由本身中从该字符串中去掉前导零,还是需要在控制器文件中进行替换?如果可以在routing.py中实现,我宁愿在那里实现——但我无法从我正在阅读的文档中完全理解它 我知道我引入了一个不同的路由库,这是在作弊,因为我没有使用路由,但下面介绍了如何使用Werkzeug的路由包。它允许您指

在my Pylons应用程序中,有些内容位于类似的URL上。用户可以直接访问该URL,或通过搜索页面搜索“31415”。然而,我的约束意味着应该转到与上面相同的页面,搜索“0000000000031415”。我可以在路由本身中从该字符串中去掉前导零,还是需要在控制器文件中进行替换?如果可以在routing.py中实现,我宁愿在那里实现——但我无法从我正在阅读的文档中完全理解它

我知道我引入了一个不同的路由库,这是在作弊,因为我没有使用
路由
,但下面介绍了如何使用
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()
导入单元测试
从werkzeug.routing导入映射,规则
类RoutingWithInts(unittest.TestCase):
m=Map([Rule('/data/',endpoint='data_getter'))
def测试不带前导零(自):
URL=self.m.bind('localhost')
端点,urlvars=url.match('/data/31415')
self.assertEquals({'record_locator':31415},urlvars)
带前导零的def测试(自):
URL=self.m.bind('localhost')
端点,urlvars=url.match('/data/000031415')
self.assertEquals({'record_locator':31415},urlvars)
unittest.main()

我知道我引入了一个不同的路由库,这是在作弊,因为我没有使用
路由
,但下面介绍了如何使用
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()
导入单元测试
从werkzeug.routing导入映射,规则
类RoutingWithInts(unittest.TestCase):
m=Map([Rule('/data/',endpoint='data_getter'))
def测试不带前导零(自):
URL=self.m.bind('localhost')
端点,urlvars=url.match('/data/31415')
self.assertEquals({'record_locator':31415},urlvars)
带前导零的def测试(自):
URL=self.m.bind('localhost')
端点,urlvars=url.match('/data/000031415')
self.assertEquals({'record_locator':31415},urlvars)
unittest.main()

您实际上可以通过,因为它们允许您修改URL中的变量

您实际上可以通过,因为它们允许您修改URL中的变量

嗯,我可以尝试将路由变量强制为int,这可能会奏效。谢谢你的建议。@Sean M,如果你在这里发布你的强制代码,那么其他在路由方面有类似困难的人也会受益。我还没有让它发挥作用,我怀疑这个方向可能不会有成效(嗯,我可以尝试将路由变量强制为int,这可能会奏效。谢谢你的建议。@Sean M,如果你在这里发布强制代码,那么其他在路由方面有类似困难的人也会受益,这会有所帮助。我还没有让它起作用,我怀疑这个方向可能不会有成效(