12

Django の URLconf を使用しています。受信する URL は、/?code=authenticationcode
を使用して URL を照合したいのですが、うまくいきr'^\?code=(?P<code>.*)$'ません。

それから私はそれが「?」の問題であることがわかりました。 evenを使用し
て一致させようとしたため、すべて失敗しましたが、「+」またはその他の文字の場合は機能します。 「?」を一致させる方法、それは特別ですか?/aaa?aaar'aaa\?aaa' r'aaa\\?aaa'r'aaa.*aaa'

4

5 に答える 5

14
>>> s="aaa?aaa"
>>> import re
>>> re.findall(r'aaa\?aaa', s)
['aaa?aaa']

/aaa?aaaURL 内で一致しない理由は?、新しい GET クエリが開始されるためです。

したがって、URL の一致する部分は最初の「aaa」までです。残りの「?aaa」は、「?」で区切られた新しいクエリ文字列です。GET パラメータとして渡される変数「aaa」を含むマーク。

ここでできることは、URL に入る前に変数をエンコードすることです。のエンコード形式は?です%3F


/?code=authenticationcodeまた、正規表現を使用するなどの GET クエリに一致させないでください。/代わりに、URL を使用して一致させてくださいr'^$'。Django は変数codeを GET パラメータとしてrequestオブジェクトに渡します。これは、ビューで を使用して取得できますrequest.GET.get('code')

于 2012-10-07T07:36:00.713 に答える
2

?URL で変数値として使用することはできません。は?、入ってくる変数があることを示します。

お気に入り:http://www.example.com?variable=1&another_variable=2

置き換えるか、エスケープしてください。ここにいくつかの素晴らしいドキュメントがあります。

于 2012-10-07T07:36:07.157 に答える
1

Djangourls.pyはクエリ文字列を解析しないため、urls.pyファイルでこの情報を取得する方法はありません。

代わりに、ビューで解析します。

def foo(request):
   code = request.GET.get('code')
   if code:
      # do stuff
   else:
      # No code!
于 2012-10-07T07:46:53.777 に答える
0

「『?』の合わせ方、特殊?」はい。ただし、バックスラッシュを使用して適切にエスケープしています。ただし、先頭のスラッシュをどこで説明したかわかりません。そのビットを追加する必要があるだけです:

r'^/\?code=(?P<code>.*)$'
于 2012-10-07T07:37:55.303 に答える
0

正規表現のメタ文字を抑制します[]

>>> s
'/?code=authenticationcode'
>>> r=re.compile(r'^/[?]code=(.+)')
>>> m=r.match(s)
>>> m.groups()
('authenticationcode',)
于 2012-10-07T07:39:57.550 に答える