12.36 Djangoのルーティングシステム
基本フォーマット:
django.conf.urls インポートURL urlpatternsの = [ URL(正規表現、ビュー表示機能、パラメータ、エイリアス) ] 正規表現:正規表現文字列 ビューが機能表示:呼び出し可能なオブジェクト、一般的に機能ビューを指定するか、または経路機能の文字列表示 パラメータ:デフォルトビュー機能(辞書)に渡されるオプションのパラメータ オプションのパラメータ名:エイリアス
12.361ルーティング正規表現
django.conf.urls インポートURL から django.contribのインポートADMIN から app01 インポートビュー urlpatterns = [ URL(R&LT ' ^ ADMIN / ' 、admin.site.urls)、 URL(R&LT ' ^ book_list /([0-9 ] {} 4)/(\ D {2})。'、views.book_list)、 #位置パラメータ捕捉括弧で:(4桁)、(2桁) #publisher_listこと(要求、X、Y) URL(R&LT ' ^は、(P <N-> [0-9] {}。4?)/(?P <M> \ D {2})/ publisher_listである' 、views.publisher_list)、 #publisher_list(要求、n、m)は #の括弧の捕捉によるキーパラメータ #の機能を表示するために、追加のパラメータを渡す(学習) URL(R&LT ' ^ DEMO1 /([0-9] {}。4)/(\ D {2} )/ $ '、views.demo1、{ 『名前』:『エゴン』})、 #辞書ビュー関数に渡されるオプションのパラメータ、およびキー辞書マッチングパケット競合を命名する場合、追加の辞書形パラメータは勝つ #のビュー機能は、パラメータのデフォルト値に設定 URL(R&LT ' ^ブログ/ $ '、views.page)、 #のデフォルト値を。1 = NUM URL(R&LT " ^ブログ/(?P <NUM> [0-9 ] +)/ $ "、views.page)、 #と一致するようにそれらの値を使用する] #views.pyがnumのデフォルト値を指定することができ デフページ(リクエスト、NUM = " 1 " ): 合格
図1は、試合を中断成功すると、正規表現を照合することによって一番上から書き込み順に要素をurlpatterns。2、のみ(その周り括弧の対を配置するために、URLから値をキャプチャするパケット一致)。図3は、各URLを持っているので、リードバックスラッシュを追加する必要はありません。例えば、それは^記事、ない^ /記事でなければなりません。図4に示すように、各正規表現R「」の前部は任意であるが、添加することを提案します
注意:
#URLアドレスを開くかどうかは、「/」CIであるとジャンプする「/」のパスの後ろにアクセスできません APPEND_SLASH = 真 #1 常に文字列のキャプチャパラメータ #はパケットにマッチした、名前と一致するパケットはと混合して使用することはできません
12.362は他のURLconfのを含めます
django.conf.urls インポートし、URLを含む urlpatternsは = [ URL(R&LT ' ^ ADMIN / ' 、admin.site.urls)、 URL(R&LT ' ^をapp01 / '、(含める' app01.urls '))、 #缶URLconfの他の文書が含まれています ]
12.363 URL名とURL逆引き参照
URL(R&LT ' ^ホーム'、views.home、名前= ' ホーム')、 # URLエイリアスマッチングモードホームからの URL(R&LT ' ^インデックス/(\ D *)'、views.index、名前= " インデックス")、 # という名前の屈折率整合モードのURL
エイリアスによると、テンプレート言語でURLを検索します。
#パラメーターなし: {%のURL ' ホーム'%} #位置パラメータ: {%URL " ホーム" " 2019 " " 9。"%} #のキーパラメータ: {%URL " ホーム" " 年" = 2019 " 月" = 9%}
views.py応じて別名でURLを検索します。
django.urls インポートリバース から django.shortcuts インポートリダイレクト DEFの:redirect_to_year(リクエスト) 年 = 2006 #パラメータなしのURLを:( '別名')逆 #位置パラメータを:( "2018" =引数、 "エイリアス"(リバース 、 )) #のキーパラメータ:逆( "エイリアス"、kwargsからは= { "K1"を : 。パラメータ1、...}) を返すリダイレクト(リバース(' ニュース年のアーカイブ'、引数= (年、))) リターンリダイレクト(リバース(' ニュース年のアーカイブ'、kargs = { ' 年':2006}))
12.364の名前空間モード
urls.pyでのプロジェクト:
django.conf.urls インポート、URLを含む urlpatterns = [ URL(R ' ^ app01 / '、(含める' app01.urls '、名前空間は= ' app01を' ))、 URL(R ' ^ app02 / 'を、(含めます' app02.urls '名前空間= ' app02 」))、 ]
urls.pyでapp01:
django.conf.urls インポートURLを から app01 インポートビュー APP_NAME = ' app01 ' urlpatterns = [ URL(R ' ^(?P <PK> \ D +)/ $ '、views.detail、名前= ' 詳細' ) ]
urls.pyでapp02:
django.conf.urls インポートURLを から app02 インポートビュー APP_NAME = ' app02 ' urlpatterns = [ URL(R ' ^(?P <PK> \ D +)/ $ '、views.detail、名前= ' 詳細' ) ]
さて、URLに2人のアプリ名が繰り返され、URLの時間反転は、名前空間のURLの現在の名前を介して取得することができます
エイリアスによると、テンプレート言語でURLを検索します。
{%のURL " 名前空間:別名"パラメータ1、パラメータ2 ...%} #パラメータなし: {%URL ' app01:ディテール'%} #位置パラメータ: {%URL " app01:詳細" " 2019 " " 9。"%} #のキーパラメータ: {%のURL ' app01:詳細' PK = 12である%} {%のURL " app01:詳細"" 年" = 2019 " 月" =} 9%。
views.py応じて別名でURLを検索します。
django.urls インポートリバース から django.shortcuts インポートリダイレクト DEF :(要求を)redirect_to_year 年 = 2006 #なし参考URL:リバース( '名前空間:エイリアス') #位置パラメータ:逆( "名前空間:エイリアス"、引数を=(パラメータ1、パラメータ2、...)) #のキーパラメータ:逆( "名前空間:別名"、kwargsから= { "K1" :パラメータ1、...}) を返すリバース((リダイレクト' app02。詳細'引数= (年))) を返すリダイレクト(リバース(' app02:詳細'kwargsから= { ' PK ':}。11))
URL内のアプリも同じ名前を正しいURLを取得するために逆にすることができるにもかかわらず