3

クラスベースのビューで url パラメータのデフォルト値を作成するにはどうすればよいですか? たとえば、TemplateView

例えば:

url(r'^(?P<num>\d+)|/$', MyView.as_view())

URL に num が指定されていない場合、デフォルト値の '4' を設定したい

4

2 に答える 2

4

次のような名前を含む正規表現を指定した場合:

url(r'^(?P<num>\d+)|/$', MyView.as_view())

次にnum、常にキーワード引数としてビュー関数に渡されます。正規表現が一致しても一致しない場合はnumnumビューに 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
于 2013-01-20T23:17:35.953 に答える
1

numURL に が指定されていない場合、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 を割り当てます。

于 2013-01-20T22:02:02.407 に答える