チュートリアルで説明されているように、現在、URL のパラメーターを取得するために正規表現を定義しています。HttpRequest
オブジェクトの一部として URL からパラメーターにアクセスするにはどうすればよいですか?
MyHttpRequest.GET
は現在、空のQueryDict
オブジェクトを返します。
ライブラリなしでこれを行う方法を学びたいので、Django をよりよく知ることができます。
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
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 パスを使用するか、クエリ パラメーターを使用するかを決定するときは、次の情報が役立つ場合があります。
/blog/post/15/
(not /blog/posts/?id=15
)) 。/blog/post/15/?show_comments=1
。/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
GET の使用
request.GET["id"]
POST の使用
request.POST["id"]
def some_view(request, *args, **kwargs):
if kwargs.get('q', None):
# Do something here ..
時間を節約できるヒントを共有したいと思います。ファイルで次
のようなものを使用する場合:urls.py
url(r'^(?P<username>\w+)/$', views.profile_page,),
これは基本的にwww.example.com/<username>
. 必ず URL エントリの最後に配置してください。そうしないと、以下に続く URL エントリと競合する可能性があります。つまり、それらの 1 つにアクセスすると、素敵なエラーが発生User matching query does not exist.
します。それが役に立てば幸い!
これはまさにあなたが求めていたものではありませんが、このスニペットは での管理query_strings
に役立ちますtemplates
。