PythonとDjangoは初めてです。URLPatternをurls.pyに次のように追加しました:
url(r'^address_edit/(\d)/$', views.address_edit, name = "address_edit"),
URLに可変長の整数のパラメータを受け入れてほしい。データベーステーブルの「id」の場合は0、100、1000、99999。ただし、上記のパターンでは1桁しか受け入れないことがわかりました。 1桁だけではなく整数(例:999999)を渡すと、エラーが表示されます
Reverse for 'address_edit' with arguments '(9999999,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['address_book/address_edit/(\\d)/$']
プログラムがURLから任意の数の整数を受け入れることができるURLパターンを構築するにはどうすればよいですか?
正規表現には、次のような+
修飾子が必要です。
^address_edit/(\d+)/$
Pythonの正規表現ドキュメント からの引用、
'+'
結果のREを前のREの1回以上の繰り返しと一致させます。
ab+
はa
と一致し、その後にゼロ以外の数のb
sが続きます。a
だけでは一致しません。
\d
は任意の数字(0-9
)と一致します。しかし、それは一度だけ一致します。 2回一致させるには、\d\d
を実行します。ただし、受け入れる桁数が増えると、\d
sの数を増やす必要があります。しかし、正規表現にはそれを行うためのより簡単な方法があります。受け入れる桁数がわかっている場合は、次のことができます。
\d{3}
これは、3つの連続した数字を受け入れます。 3〜5桁を受け入れたい場合はどうなりますか? RegExはそれをカバーしています。
\d{3,5}
簡単ですね:)現在、3〜5桁の数字のみを受け入れます(注:3未満のものも一致しません)。ここで、最小の1桁を確認する必要がありますが、最大は何でもかまいません。あなたならどうしますか?このように、範囲をオープンエンドのままにしてください
\d{3,}
これで、RegExエンジンは最小3桁に一致し、最大は任意の数になります。最小の1桁を一致させ、最大を任意の数にすることができる場合は、どうしますか
\d{1,}
正解:)これでも機能します。しかし、同じことを行うための省略表記+
があります。ドキュメントに記載されているように、ゼロ以外の桁数と一致します。
Django> = 2.0バージョンでは、これは以下のようによりクリーンでシンプルな方法で行われます。
from Django.urls import path
from . import views
urlpatterns = [
...
path('address_edit/<int:id>/', views.address_edit, name = "address_edit"),
...
]