PythonのDjangoフレームワーク(ルーティングシステムは、URLの名前とURLを解析、逆含む名前空間モード)

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を取得するために逆にすることができるにもかかわらず

おすすめ

転載: www.cnblogs.com/mylu/p/11455898.html