2

小さなウィキを作成しようとしていますが、それらの正規表現ルールを作成するのに問題があります。

私がやろうとしているのは、すべてのページに独自の編集ページが必要であり、編集ページで[送信]を押すと、Wikiページにリダイレクトされるはずです。

アプリケーションに次のURLが必要です。

  • http://example.com/<page_name>

  • http://example.com/_edit/<page_name>

私のURLConfには次のルールがあります。

url(r'(_edit/?P<page_name>(?:[a-zA-Z0-9_-]+/?)*)', views.edit),
url(r'(?P<page_name>(^(?:_edit?)?:[a-zA-Z0-9_-]+/?)*)', views.page),

しかし、何らかの理由で機能していません。

どうすればこれを機能させることができますか?

1つ(または両方)が同じものに一致するようです。

4

2 に答える 2

3

より簡潔なアプローチに従って、私は実際に編集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つの問題を抱えています。-ジェイミー・ザウィンスキー

于 2012-07-30T16:20:00.080 に答える
0

より簡単な次の URL を試してください。

url(r'_edit/(?P<page_name>[\w-]+), views.edit)'
url(r'(?P<page_name>[\w-]+), views.page),
于 2012-07-30T15:50:57.793 に答える