クラスベースのビューで url パラメータのデフォルト値を作成するにはどうすればよいですか? たとえば、TemplateView
例えば:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
URL に num が指定されていない場合、デフォルト値の '4' を設定したい
クラスベースのビューで url パラメータのデフォルト値を作成するにはどうすればよいですか? たとえば、TemplateView
例えば:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
URL に num が指定されていない場合、デフォルト値の '4' を設定したい
次のような名前を含む正規表現を指定した場合:
url(r'^(?P<num>\d+)|/$', MyView.as_view())
次にnum
、常にキーワード引数としてビュー関数に渡されます。正規表現が一致しても一致しない場合はnum
、num
ビューに None として渡されます。
次のビュー関数があるとします。
def get(self, request, *args, **kwargs):
print 'args %s' % repr(args)
print 'kwargs %s' % repr(kwargs)
runserver によって出力される出力は次のとおりです。
# url: /
args ()
kwargs {'num': None}
# url: /45/
args ()
kwargs {'num': u'45'}
値を検出し、必要にNone
応じてデフォルトを割り当てるのはあなた次第です。
def get(self, request, *args, **kwargs):
num = kwargs.get('num', None)
if num is None:
num = 4
num
URL に が指定されていない場合、Django はその行を使用しurls.py
てページを表示しません。これを実現するには、次のように URL 構成を変更できます。
url(r'^$', MyView.as_view())
url(r'^(?P<num>\d+)|/$', MyView.as_view())
ではMyView
、次のようにしてパラメーターを取得できます。
def get(self, request, *args, **kwargs):
my_url = request.GET.get('url', 4)
URL で指定された値を に割り当てるか、my_url
それ以外の場合はデフォルトとして 4 を割り当てます。