如何操纵查询字符串?

时间:2014-07-01 09:46:27

标签: python tornado

我使用此命令获取查询字符串:

query_string = self.request.query

我的查询字符串是这样的:

"channel_sort=trending&channel_time=6&keyword=&channel_prepage=16&channel_pageno=25&page_country=usa"

我想将channel_pageno值更改为1而不是25.我已经这样做了:

def query_first_page(query):
    qs = query.split('&')
    qs_parts = {}
    for item in qs:
        temp = item.split('=')
        qs_parts.update({temp[0]: temp[1]})
    qs_parts['channel_pageno'] = 1

    list = []
    for key, value in qs_parts.iteritems():
        list.append(str(key) + '=' + str(value))
    return '&'.join(list)

我的功能正常。但我认为必须有更好的方法来做到这一点,例如查询字符串处理lib或类似的东西。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

import urllib

data = self.request.GET.copy() # or data = urlparse.parse_qs(self.request.query)
data['channel_pageno'] = 1

uri = urllib.urlencode(data)

您将在uri中修改查询字符串。

答案 1 :(得分:1)

尝试类似:

import re
query_string  = re.sub(r"channel_pageno=[0-9]+&", "channel_pageno=1&", query_string)
使用正则表达式,

re.sub的工作方式与str.replace类似。在这里,您需要查找channel_pageno=后跟至少1个数字和&符号,并将其替换为正确的值

这将取代channel_pageno=的所有出现。如果您只想更换第一个或进一步定制更换,请参阅我提供的文档