python3.doc_46
R e i - D r e a m
for Laravel
TOP > Python3 > Django(ルーティング)
Guest
login

最終投稿日:2022年6月18日

Django(ルーティング)
プロジェクトの urls.py
プロジェクトの urls.py では、各アプリ単位の urls.py へ関連付けを行います。
例)
from django.contrib import admin
from django.conf.urls import include, url
from django.views.generic import RedirectView
urlpatterns = [
    url(r'^$', RedirectView.as_view(url='hello/')),                                 ※【1】
    url(r'^hello/', include('hello.urls', namespace='hello')),            ※【2】
    url('admin/' , admin.site.urls),                                                               ※【3】
]
URL は正規表現で記述し、マッチしたコードを処理する
【1】リダイレクト設定 何も文字列がない場合なので http://hoge.com/ の様なドメイン名までのURLにマッチする
リダイレクト先の URL が hello となっているので【2】にマッチする
【2】各アプリへ飛ばす http://hoge.com/hello/ でマッチし、hello モジュールの urls.py へ処理が遷移する。また、、第2引数にネームスペース名 hello も記述する。
【3】アドミン DJANGO 標準で搭載されている ADMIN ページを使用する場合はこのままで
【注意】
ドメインのみの「r'^$'」のパターンを他のアプリに関連付ける場合は、リダイレクトで対応する事!
namespace が重複すると警告が発生します。また、URLの逆引きもできなくなります。
アプリの urls.py
★ views.py 関数ベース
各アプリでは、URL パターンとメソッドを関連付けます。
例)
from django.conf.urls import url
from django.views.generic import RedirectView
from . import views
app_name = 'hello'                                                                      ※namespace 名
urlpatterns = [
    url(r'^$', RedirectView.as_view(url='index/')),             ※【1】【2】を参照する
    url(r'^index/$', views.index1, name='index1'),            ※【2】
    url(r'^index/(?P\w+)/(?P\w+)$', views.index2, name='index2'),            ※【3】
]
【1】ドメイン/hello/                                  ⇒ 【2】を参照する
【2】ドメイン/hello/index/                     ⇒ [hello/views.py] def index1(request) に対応
【3】ドメイン/hello/index/123/aaa    ⇒ [hello/views.py] def index2(request,id=0,foo='xxx') に対応
★ views.py クラスベース
各アプリでは、URL パターンとクラスを関連付けます。
例)
from django.conf.urls import url
from django.views.generic import RedirectView
from .views import IndexView1, IndexView2, IndexView3
           ※[views.py]よりクラスを読み込む(全部なら * でも良い)
app_name = 'hello'
urlpatterns = [
url(r'^$', RedirectView.as_view(url='index/')),                       ※【1】【2】を参照する
url(r'^index/$', IndexView1.as_view(), name='index1'),    ※【2】
url(r'^index/(?P\w+)/(?P\w+)$', IndexView2.as_view(), name='index2'),    ※【3】名前付き引数
url(r'^index3/(\d+)/(\w+)$', IndexView3.as_view(), name='index3'),            ※【4】名前なし引数
]
【1】ドメイン/hello/                 ⇒ 【2】を参照する
【2】ドメイン/hello/index/    ⇒ [hello/views.py] class IndexView1(View) の def get(self, request) に対応
【3】ドメイン/hello/index/123/aaa    ⇒ [hello/views.py] class IndexView2(View) の def get(self, request, *args, **kwargs) に対応
【4】ドメイン/hello/index3/123/aaa    ⇒ [hello/views.py] class IndexView3(View) の def get(self, request, *args, **kwargs) に対応
【メモ】
[?]での GET パラメータを渡したい場合も通常通り URL に埋め込めます。
例)
    ドメイン/hello/index/?hoge=123&foo=aaa                     【2】のパターンにマッチ
    ドメイン/hello/index/123/aaa?hoge=123&foo=bbb    【3】のパターンにマッチ
きっぷる
ログインしてコメントを残そう!!


きっぷる