より簡潔なアプローチに従って、私は実際に編集URLを次のように定義します。
http://example.com/<pagename>/edit
これは私の謙虚な意見ではより明確で推測可能です。
次に、DjangoがURLパターンを定義したのと同じ順序でループし、着信リクエストに一致する最初のパターンで停止することを思い出してください。したがって、それらが定義されている順序は非常に重要です。
あなたの質問への答えを持って来る:
^(?P<page_name>[\w]+)$
リクエストを任意の/PageNameに一致させます
開始カレットと最後のドル記号を常に覚えておいてください。つまり、URLは正規表現の直前と直後にそれぞれ開始および停止する必要があります。そうしないと、先頭または末尾の記号/文字によって正規表現も一致することになります(その場合は404を表示したい)。
^_edit/(?P<page_name>[\w]+)$
編集URLと一致します(または、REST URLと一般に呼ばれる^(?P<page_name>[\w]+)/edit$
ユーザーフレンドリーなURLが好きな場合は、RESTfullnesはURLスタイルとは関係のない概念です)。
要約すると、URLに次のように入力します。
url(r'^(?P<page_name>[\w]+)$', views.page)
url(r'^_edit/(?P<page_name>[\w]+)$', views.edit)
\w
自分で定義したセットで変更することにより、URLに特定の文字を含まないように簡単に強制できます。
Django URLディスパッチの詳細については、こちらをお読みください。
注:正規表現は、特にネットワークに接続する場合、危険と同じくらい強力です。シンプルに保ち、何を定義しているのかを本当に理解してください。そうしないと、Webアプリケーションがいくつかのセキュリティ問題にさらされる可能性があります。
問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。-ジェイミー・ザウィンスキー