Djangoのルーティングシステム:URL

、URLconfの設定

  1. 基本フォーマット

    from django.conf.urls import url
    urlpatterns = [
         url(正则表达式, views视图,参数,别名),
    ]
    • パラメータ説明
      • 正規表現:正規表現文字列
      • ビュービュー:呼び出し可能オブジェクトは、ビューは、一般の関数であり、
      • パラメータ:デフォルトのビュー機能(辞書)に渡されるオプションのパラメータ
      • 別名:オプションのパラメータ名
  2. ルーティング・システムのバージョン2.0をジャンゴ

    • Re_pathバージョン2.0とURLのバージョン1.11と同じ用法であります
    from django.urls import path,re_path
    urlpatterns = [
        path('articles/2003/', views.special_case_2003),
    ]

第二に、正規表現

  1. 基本構成

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^articles/2003/$', views.special_case_2003),
    ]
  2. 注意事項

    • トップダウンからの正規表現に一致する書き込み順で一つの要素の一つはマッチが成功したら、続行されません、urlpatterns
    • URLから値をキャプチャするには、唯一の(パケットの一致を使用して)その周りに括弧のペアを配置します
    • 各URLを持っているので、リードバックスラッシュを追加する必要はありません。例えば、それは^記事、ない^ /記事でなければなりません
    • 「R」の前に、各正規表現はオプションですが、追加提案し
  3. サプリメント

    • APPEND_SLASH =真:オープンアクセスURLアドレスは、構成アイテムの/とパスに/ジャンプの後ろにされていないかどうか
    • デフォルトの設定では、このパラメータをAPPEND_SLASHませんが、Djangoは、このパラメータをデフォルトでDjangoのsettings.pyファイルがTrue APPEND_SLASH =で、その役割は、自動的にURLの最後に追加されました「/」

第三に、グループ名が一致します

  1. グループ:(括弧で)パケットにマッチする単純な正規表現URLの値をキャプチャし、ビュー機能の位置にパラメータとして渡さします

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^articles/([0-9]{4})/$', views.year_archive),
        url(r'^articles/([0-9]{4})/([0-9]{2})/$', views.month_archive),
    ]
  2. パケットの命名:正規表現に一致する名前を使用してパケットURLの値を取り込むように設定し、ファンクション・キーの表示にパラメータとして渡さ

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^articles/(?P<year>[0-9]{4})/$', views.year_archive),
        url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
    ]
    • 追加:するときは、ビュー関数に渡す追加のキーワード引数を表す辞書の三番目のパラメータのURL
      • 辞書には、URLパラメータの追加パラメータを渡すと、同じ名前の名前のキーワード引数の値をキャプチャする場合は、関数が呼び出され、それはパラメータの辞書を使用するのではなく、URLで撮影したパラメータになります
      • それは優先順位です:追加のパラメータ> URLキャプチャパラメータ
  3. UPLconfマッチ場所:

    • URLconfは、URLリクエストを見て、それがGETとPOSTのパラメータ、およびドメイン名を含まない、通常のPython文字列として扱われます
      • http://www.example.com/myapp/要求、のURLconfが探します/ myappに/
      • http://www.example.com/myapp/?page=3要求、のURLconfが探します/ myappに/
    • URLconfの要求方法は、すなわち、すべての要求メソッドをチェックしません(1つのURLのPOST、GET、HEAD、などで)、同じ機能にルーティングされています
  4. キャプチャパラメータは文字列です:通常のPython文字列としてのURLconfパラメータで撮影し、それぞれがどのようにマッチする正規表現に関係なく、機能を表示します

  5. 個々のケースがありますが、デフォルト値の表示機能を指定する必要があります

    # urls.py中
    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^blog/$', views.page),
        url(r'^blog/page(?P<num>[0-9]+)/$', views.page),
    ]
    # 两个URL模式指向相同的view,但是第一个模式并没有从URL中捕获任何东西
    
    # views.py中,可以为num指定默认值
    def page(request, num="1"):
        pass
    # 如果第一个模式匹配上了,page函数将使用其默认参数num=“1”,如果第二个模式匹配,page将使用正则表达式捕获到的num值
  6. 含まれます:ルートの配布を

    • 異なる機能や種類によると、アプリのファイルの機能で書かれたさまざまなルーティング機能を置くことができ、異なる空間で異なる機能と同等のリンクURLの使用を含みます
    from django.conf.urls import include, url
    urlpatterns = [
       url(r'^admin/', admin.site.urls),
       url(r'^app01/', include('app01.urls')),  # 可以包含其他的URLconfs文件
    ]
    • 補足:app01.urls
    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^blog/$', views.blog),
        url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})/$', views.blogs),
    ]
    • 名前空間:名前空間パラメータを含みます
      • 指定された正確な機能を容易にするために、空間内に存在する同じ名前の異なるルーティング機能を区別しやすいです
    from django.conf.urls import include, url
    urlpatterns = [
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]

第四に、名前と逆解析のURL

4.1 URL名

  1. URL第四パラメータ、すなわちオプションのパラメータ名、別名であります

  2. 名前付き:名前=「別名」

    from django.conf.urls import url
    urlpatterns = [
     url(r'^home', views.home, name='home'),        # 给我的url匹配模式起名为 home
     url(r'^index/(\d*)', views.index, name='index'),       # 给我的url匹配模式起名为index
    ]

4.2逆引き参照

  1. リバース解像度:完全なURLパスエイリアスを取得

  2. ケース1:静的ルーティング

    • 名前
    from django.conf.urls import url
    urlpatterns = [
     url(r'^blog/$', views.blog, name='blog'),
    ]
    • テンプレートで使用
    {% url 'blog' %}         {# 完整URL路径:/blog/ #}
    • 使用中のファイルPY
    from django.urls import reverse
    reverse('blog')           # 完整URL路径:/blog/
  3. シナリオ2:グループ化

    • 名前
    from django.conf.urls import url
    urlpatterns = [
     url(r'^blog/([0-9]{4})/(\d{2})/$', views.blogs, name='blogs'),
    ]
    • テンプレートで使用
    {% url 'blogs' 2222 12 %}        {# 完整URL路径:/blog/2222/12/ #}
    • 使用中のファイルPY
    from django.urls import reverse
    reverse('blogs',args=('2019','06'))        # 完整URL路径:/blog/2019/06/ 
  4. ケース3:グループ名

    • 名前
    from django.conf.urls import url
    urlpatterns = [
     url(r'^blog/(?P<year>[0-9]{4})/(?P<month>\d{2})$', views.blogs, name='blogs'),
    ]
    • テンプレートで使用
    {% url 'blogs' year=2222 month=12 %}      {# 完整URL路径:/blog/2222/12/ #}
    • 使用中のファイルPY
    from django.urls import reverse
    reverse('blogs',kwargs={'year':'2019','month':'06'})      # 完整URL路径:/blog/2019/06/ 

第五に、名前空間モードの分析を逆転

  1. プロジェクトディレクトリにurls.py

    from django.conf.urls import url, include
    urlpatterns = [
        url(r'^app01/', include('app01.urls', namespace='app01')),
        url(r'^app02/', include('app02.urls', namespace='app02')),
    ]
  2. urls.pyでapp01

    from django.conf.urls import url
    from app01 import views
    urlpatterns = [
        url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
    ]
  3. urls.pyでapp02

    from django.conf.urls import url
    from app02 import views
    urlpatterns = [
        url(r'^(?P<pk>\d+)/$', views.detail, name='detail')
    ]
  4. 逆引き参照構文:「名前空間名:URL名」

    • テンプレートに使用します
    {% url 'app01:detail' pk=12 %}
    {% url 'app02:detail' pk=12 %}
    • PYファイルを使用します
    from django.urls import reverse
    reverse('app01:detail', kwargs={'pk':11})
    reverse('app01:detail', kwargs={'pk':11})
  5. 注:多層ルート分布を持っている場合は、複数の名前空間の名前で、名前空間名は、層によってエイリアス層が先行されなければなりません

    {# 简单示例:app01是第一层路由空间的namespace,xxx是第二层路由空间的namespace #}
    {% url 'app01:xxx:index' %}

おすすめ

転載: www.cnblogs.com/zengyi1995/p/11140527.html