ルーティング層03ジャンゴ-1(のURLconf)

シンプルなルーティング設定:URLパラメータnによる動的パケット取得

django.conf.urls インポートURLを
 からインポートビュー


urlpatterns = [
    URL(R ' ^記事/ 2003 / $ ' 、views.special_case_2003)、
    URL(R ' ^記事/([0-9] {4})/ $ ' 、views.year_archive)
    URL(R ' ^記事/([0-9] {4})/([0-9] {2})/ $ ' 、views.month_archive)
    URL(R ' ^記事/([0-9] {4})/([0-9] {2})/([0-9] +)/ $ ' 、views.article_detail)
]

 

注意:

  • URLから値をキャプチャするには、あなたはそれを囲む括弧のペアを配置する必要があります。
  • 各URLを持っているので、リードバックスラッシュを追加する必要はありません。例えば、それはする必要があります^articles 代わりに  ^/articles
  • 「R」の前に、各正規表現は任意ですが、追加提案しました。これは、文字列が「原始的」であることはPythonを伝えます - 文字の文字列をエスケープすべきではありません
要求のいくつかの例:
 /記事/ 2005/03 /要求リストは、第三のモードと一致します。Djangoは(要求、機能views.month_archiveを呼ぶだろう' 2005 '' 03 ' )。
/記事/ 2005/3 / 第三の月のリストは、モデルが2つの数値を必要とする必要がありますので、任意のURLパターンと一致していません。
/記事/ 2003 / シーケンスにマッチしたパターンは、最初のものは最初のテストマッチとなりますので、リストモードでの最初の試合は、第二ではありません。試合の順番を検出するために、いくつかの特殊なケースの無料のインサートが好きください。
/記事/ 2003は、各パターンは、URLの末尾にバックスラッシュを必要とするため、パターンのいずれかと一致していません。
/記事/ 2003年3月3日 / 最後のパターンと一致します。Djangoは関数views.article_detail呼び出します(要求を、' 2003 '' 03 '' 03 ' )。

 

よく知られているグループ:グループの名前は、質量参加キーワードを達成するために

  上記の例では、URLの値とビューに渡された位置パラメータを捕捉するために(括弧で)単純な正規表現名前グループを使用します。より高度な使い方では、ビューに渡されるURLとキーワードパラメータの値をキャプチャするために名前の正規表現のグループを使用することができます。

  Pythonの正規表現では、正規表現の構文グループ名は(?P<name>pattern)、どこname のグループの名前で、pattern マッチするパターンです。

ここでは上記の名前のグループのURLconf書き換えを使用しています。

django.conf.urls インポートURLを
 からインポートビュー

urlpatterns = [
    URL(R ' ^記事/ 2003 / $ ' 、views.special_case_2003)、
    URL(R ' ^記事/(?P <年> [0-9] {4})/ $ ' 、views.year_archive)、
    URL(R ' ^記事/(?P <年> [0-9] {4})/(?P <月> [0-9] {2})/ $ ' 、views.month_archive)、
    URL(R " ^記事/(?P <年> [0-9] {4})/(?P <月> [0-9] {2})/(?P <日> [0-9] {2})/ $ ' 、views.article_detail)
]

 

  キャプチャされた値の代わりに関数のパラメータを表示するための位置パラメータ転送のキーとして:この実装では、唯一の微妙な違い前の例と同じです。例えば:

/記事/ 2005/03 /要求の呼び出しはviews.month_archive(リクエスト、年= ' 2005 '、=月' 03 ')関数の代わりにviews.month_archive(要求、' 2005 '' 03 ' )。
/記事/ 2003年3月3日 / 要求(リクエスト、年=関数views.article_detailを呼び出します' 2003 '、=月' 03 '、デイ= ' 03 ')。

 

  あなたのビュー定義関数のパラメータの順序を並べ替えることができます - 実際には、これはあなたのURLconfは、オーダーパラメータエラーの問題を起こしやすい、より明確でないことを意味します。もちろん、これらの利点は、シンプルさを犠牲にして来ます。

分布:自分のルーティングファイルを広めるために、すべてのアプリケーションのURLを入れて

  アプリプロジェクトが複数ある場合、この方法は、フォルダ内のAPPアプリURLのそれぞれで、(例えば、ブログ文書インスタンス)が使用され

django.conf.urls インポート、URLが含まれます

urlpatterns = [
   URL(R ' ^管理/ ' 、admin.site.urls)、
   URL(R ' ^ブログ/ '、(含ま' blog.urls ' ))を、
]

 

逆引き参照

  使用Djangoプロジェクトでは、一般的な要件は、生成されたコンテンツに埋め込まれた(とビューは、ユーザーのURLに表示される、など)や、ナビゲーション処理サーバ(リダイレクト)のためのURLの最終形態を得ることです。有効期限が切れある程度のURLにつながるしやすいので、強い願いは、URL(面倒、エラーが発生しやすいと拡張可能ではない)、または無関係な特殊なURL生成機構のURLconfを設計は、ハードコードにありません。

さまざまなレベルのために、必要なURLは、Djangoは逆引き参照URLのためのさまざまなツールを提供しています。

  • テンプレートで:URLテンプレートタグを使用してください。
  • Pythonのコードでは:使用してdjango.core.urlresolvers.reverse() 機能を。

urls.py

django.conf.urls インポートURLを
 からインポートビュー

urlpatterns = [
     ... 
    URL(R ' ^記事/([0-9] {4})/ $ '、views.year_archive、名前= ' ニュース年のアーカイブ' )、
    ... 
]

 

テンプレートには:

<a href= "{% URL'news-year-archive' 2012 %}"> 2012年アーカイブする</a>

<UL> 
{ため yearvar  year_listの%}
 <LI>の<a href= "{% URL'news-year-archive' yearvar %}"> {{yearvar}}アーカイブする</a> </ LI> 
{% ENDFOR%}
 </ UL>

 

Pythonで:

django.core.urlresolvers インポートから django.http 輸入HttpResponseRedirect

デフredirect_to_year(リクエスト):

    年= 2006

    返す HttpResponseRedirect(リバース(' ニュース年のアーカイブ'、引数=(年、)))   同リダイレクト( "/パス/")

 

注意:お使いのURLパターンに名前を付ける場合、名前は他のアプリケーションとの名前の競合を使用していないことを確認してください。あなたのURLパターンが呼び出された場合はcomment、他のアプリケーションは、同様の名前を持っているあなたは、テンプレートにこの名前を使用する場合、URLを挿入するかを保証することはできません。このようなアプリケーションの名前として、URL名に接頭辞を追加し、それが紛争の可能性を削減します。お勧めmyapp-comment の代わりにcomment

名前空間[未完]

名前空間(英語:名前空間)は、可視範囲の識別子です。識別子は、名前空間を複数定義することができ、それは無関係であり、異なる名前空間に意味を有します。この方法では、新しい名前空間に他の名前空間での既存の定義ので、既存の識別子と競合しない任意の識別子を定義することができます。

名前がない範囲として、Djangoは逆ソリューションのURLは、グローバルな順序になりますプロジェクトを検索し、URLを指定して最初の名前を見たときに、すぐに戻ったとき
開発プロジェクトで私たちは、多くの場合、名前を使用しますアンチはそれは、起きてからこれを避けるために、間違ったURL逆ソリューションに名前の導入を招くことがあり、別のアプリのURLで同じ名前のないときは慎重に定義、URLを解決属性スペース。

urls.pyのプロジェクト:

urlpatterns = [
    URL(R '^管理/'、admin.site.urls)、
    URL( '^ app01 / R'、( "app01.urls"、名前空間は= "app01")を含みます)、
    URL( '^ app02 / R'、( "app02.urls"、名前空間は= "app02")を含みます)、
]

app01.urls:

urlpatterns = [
    URL(R '^インデックス/'、インデックス、名前= "インデックス")、
]

app02.urls:

urlpatterns = [
    URL(R '^インデックス/'、インデックス、名前= "インデックス")、
]

app01.views 

django.core.urlresolversインポート逆から

デフ指数(要求):

    (:) "インデックスapp01" を(リバース)はHttpResponseを返します

app02.views

django.core.urlresolversインポート逆から

デフ指数(要求):

    (:) "インデックスapp02" を(リバース)はHttpResponseを返します

 

おすすめ

転載: www.cnblogs.com/bilx/p/11780932.html