562

チュートリアルで説明されているように、現在、URL のパラメーターを取得するために正規表現を定義しています。HttpRequestオブジェクトの一部として URL からパラメーターにアクセスするにはどうすればよいですか?

MyHttpRequest.GETは現在、空のQueryDictオブジェクトを返します。

ライブラリなしでこれを行う方法を学びたいので、Django をよりよく知ることができます。

4

16 に答える 16

785

URL が のようなdomain/search/?q=haha場合は、 を使用しますrequest.GET.get('q', '')

qは必要なパラメータで、見つからない''場合のデフォルト値です。q

URLconfただし、代わりに** を構成するだけの場合は、からのキャプチャregexが引数 (または名前付き引数) として関数に渡されます。

そのような:

(r'^user/(?P<username>\w{0,50})/$', views.profile_page,),

次に、あなたviews.pyは持っているでしょう

def profile_page(request, username):
    # Rest of the method
于 2008-09-29T20:31:43.347 に答える
406

camflan説明を明確にするために、あなたが持っているとしましょう

  • ルールurl(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
  • の着信要求http://domain/user/thaiyoshi/?message=Hi

URL ディスパッチャー ルールは、URLパスの一部(ここでは"user/thaiyoshi/") をキャッチし、それらをリクエスト オブジェクトと共にビュー関数に渡します。

クエリ文字列 (ここでmessage=Hiは ) が解析され、パラメーターが in として格納されQueryDictますrequest.GET。HTTP GET パラメータのそれ以上の照合または処理は行われません。

このビュー関数は、URL パスから抽出された部分とクエリ パラメータの両方を使用します。

def profile_page(request, username=None):
    user = User.objects.get(username=username)
    message = request.GET.get('message')

補足として、リクエスト メソッド (この場合"GET"は 、通常は送信されたフォームの場合"POST") は にありrequest.methodます。場合によっては、期待どおりであることを確認すると便利です。

更新:情報を渡すために URL パスを使用するか、クエリ パラメーターを使用するかを決定するときは、次の情報が役立つ場合があります。

  • リソースを一意に識別するために URL パスを使用します (例: /blog/post/15/(not /blog/posts/?id=15)) 。
  • リソースの表示方法を変更するには、クエリ パラメータを使用します/blog/post/15/?show_comments=1/blog/posts/2008/?sort_by=date&direction=desc
  • わかりやすい URL を作成するには、ID 番号の使用を避け、日付、カテゴリ、スラッグなどを使用します。/blog/post/2008/09/30/django-urls/
于 2008-10-01T12:11:50.007 に答える
76

GET の使用

request.GET["id"]

POST の使用

request.POST["id"]
于 2015-01-21T08:08:50.760 に答える
30
def some_view(request, *args, **kwargs):
    if kwargs.get('q', None):
        # Do something here ..
于 2010-11-18T18:40:02.590 に答える
17

時間を節約できるヒントを共有したいと思います。ファイルで次
のようなものを使用する場合:urls.py

url(r'^(?P<username>\w+)/$', views.profile_page,),

これは基本的にwww.example.com/<username>. 必ず URL エントリの最後に配置してください。そうしないと、以下に続く URL エントリと競合する可能性があります。つまり、それらの 1 つにアクセスする、素敵なエラーが発生User matching query does not exist.

します。それが役に立てば幸い!

于 2013-02-05T02:05:25.607 に答える
8

これはまさにあなたが求めていたものではありませんが、このスニペットは での管理query_stringsに役立ちますtemplates

于 2008-09-30T09:19:21.723 に答える