5

私はこれをやっています:

urlparse.urljoin('http://example.com/mypage', '?name=joe')

そして、私はこれを取得します:

'http://example.com/?name=joe'

これを取得したい間:

'http://example.com/mypage?name=joe'

私は何を間違っていますか?

4

4 に答える 4

5

urlparse.urlunparse を使用できます:

import urlparse
parsed = list(urlparse.urlparse('http://example.com/mypage'))
parsed[4] = 'name=joe'
urlparse.urlunparse(parsed)
于 2011-03-08T13:22:22.657 に答える
1

Python 2.4-2.6 に影響する既知のバグが発生しています。

Python のバージョンを変更またはパッチできない場合は、@jd のソリューションで問題を回避できます。

ただし、標準として機能するより一般的なソリューションが必要なurljoin場合は、その特定のユース ケースの回避策を実装するラッパー メソッドを使用できます。それ以外の場合は標準にデフォルト設定されurljoin()ます。

例えば:

import urlparse

def myurljoin(base, url, allow_fragments=True):
    if url[0] != "?": 
        return urlparse.urljoin(base, url, allow_fragments)
    if not allow_fragments: 
        url = url.split("#", 1)[0]
    parsed = list(urlparse.urlparse(base))
    parsed[4] = url[1:] # assign params field
    return urlparse.urlunparse(parsed)
于 2011-03-08T13:56:44.623 に答える
1

Python 2.6のurlparseモジュールをプロジェクトにバンドルすることで解決しました。namedtupleで定義されたものもバンドルする必要がありました。collectionsこれurlparseを使用しているためです。

于 2011-03-08T16:14:19.843 に答える
0

本気ですか?Python 2.7の場合:

>>> import urlparse
>>> urlparse.urljoin('http://example.com/mypage', '?name=joe')
'http://example.com/mypage?name=joe'
于 2011-03-08T12:59:22.607 に答える