質問

正規表現がdjangoを使用して何にも一致しなかった場合に、デフォルトのパラメーターをアクションに渡す方法はありますか?


urlpatterns = patterns('',(r'^test/(?P<name>.*)?

urlpatternsの3番目のパラメーターを 'を含む辞書に設定し、nameパラメーターにメソッドのデフォルト値を指定しようとしましたが、どれも機能しませんでした。 nameパラメーターは常にNoneのようです。デフォルト値を設定できる場合、Noneのチェックをコーディングしたくありません。

明確化:ここに変更した例があります。


def displayName(request,name='Steve'):
      return HttpResponse(name)
#i also tried

urlpatterns = patterns('',
      (r'^test/(?P<name>.*)?

ビューでブラウザをポイントすると、テキストが表示されます 「なし」

アイデアはありますか

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

urlpatternsの3番目のパラメーターを 'を含む辞書に設定し、nameパラメーターにメソッドのデフォルト値を指定しようとしましたが、どれも機能しませんでした。 nameパラメーターは常にNoneのようです。デフォルト値を設定できる場合、Noneのチェックをコーディングしたくありません。

明確化:ここに変更した例があります。

<*>

ビューでブラウザをポイントすると、テキストが表示されます 「なし」

アイデアはありますか

, 'myview.displayName', dict(name='Test') ) )

ビューでブラウザをポイントすると、テキストが表示されます 「なし」

アイデアはありますか

,'myview.displayName')) #myview.py def displayName(request,name): # write name to response or something

urlpatternsの3番目のパラメーターを 'を含む辞書に設定し、nameパラメーターにメソッドのデフォルト値を指定しようとしましたが、どれも機能しませんでした。 nameパラメーターは常にNoneのようです。デフォルト値を設定できる場合、Noneのチェックをコーディングしたくありません。

明確化:ここに変更した例があります。

<*>

ビューでブラウザをポイントすると、テキストが表示されます 「なし」

アイデアはありますか

役に立ちましたか?

解決

問題は、パターンが「test /」と一致する場合、正規表現によってキャプチャされたgroupdictにはマッピング「name」= gt;が含まれることです。なし:

>>> url.match("test/").groupdict()
{'name': None}

これは、ビューが呼び出されたときに、以下に似たものを使用することを意味します:

view(request, *groups, **groupdict)

これは次と同等です:

view(request, name = None)

'test /'の場合、名前が割り当てられずに割り当てられることを意味します。

これにより、2つのオプションが提供されます。次のことができます。

  1. ビューコードでハッキングのようなものがないことを明示的に確認します。
  2. URLディスパッチルールを書き換えて、名前のキャプチャをオプションにせず、名前が指定されていない場合にキャプチャする2番目のルールを導入します。

例:

urlpatterns = patterns('',
    (r'^test/(?P<name>.+)

2番目のアプローチをとる場合、キャプチャパターンなしでメソッドを呼び出して、Pythonにデフォルトパラメータを処理させるか、委任する別のビューを呼び出すことができます。

,'myview.displayName'), # note the '+' instead of the '*' (r'^test/

2番目のアプローチをとる場合、キャプチャパターンなしでメソッドを呼び出して、Pythonにデフォルトパラメータを処理させるか、委任する別のビューを呼び出すことができます。

,'myview.displayName'), )

2番目のアプローチをとる場合、キャプチャパターンなしでメソッドを呼び出して、Pythonにデフォルトパラメータを処理させるか、委任する別のビューを呼び出すことができます。

他のヒント

私は考えできます def displayName(request、name = defaultObj);少なくとも私が過去にやったことです。デフォルト値を何に設定しましたか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top