1. ホーム
  2. python

[解決済み】Djangoのオプションのurlパラメータ

2022-04-12 03:45:34

質問

私はこのようなDjangoのURLを持っています。

url(
    r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$',
    'tool.views.ProjectConfig',
    name='project_config'
),

views.py。

def ProjectConfig(request, product, project_id=None, template_name='project.html'):
    ...
    # do stuff

問題は project_id パラメータはオプションにする必要があります。

私は /project_config//project_config/12345abdce/ を同様に有効な URL パターンとすることで もし project_id が渡されます。 では 使えるんです。

今のところ、このURLで project_id パラメータを使用します。

解決方法は?

いくつかのアプローチがあります。

1つは、正規表現で捕捉しないグループを使用することです。 (?:/(?P<title>[a-zA-Z]+)/)?

Regex Django の URL トークンをオプションにする

もう一つの、より簡単な方法は、あなたのニーズにマッチした複数のルールを持ち、すべて同じビューを指すようにすることです。

urlpatterns = patterns('',
    url(r'^project_config/$', views.foo),
    url(r'^project_config/(?P<product>\w+)/$', views.foo),
    url(r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$', views.foo),
)

ビューでは、オプションのURLパラメータにデフォルトを設定する必要があることに留意してください。

def foo(request, optional_parameter=''):
    # Your code goes here