соответствует альтернативный URL - регулярное выражение URL-адреса Django - PullRequest
3 голосов
/ 02 октября 2009

Я хочу Django URL только с 2 альтернативами /module/in/ или /module/out/

Я использую

url(r'^(?P<status>\w+[in|out])/$', 
'by_status', 
name='module_by-status'),

Но он соответствует другим шаблонам, таким как /module/i/, /module/n/ и /module/ou/.

Любая подсказка приветствуется:)

Ответы [ 2 ]

9 голосов
/ 02 октября 2009

Попробуйте r'^(?P<status>in|out)/$'

Вам необходимо удалить \w+, который соответствует одному или нескольким буквенно-цифровым символам или подчеркиваниям. Регулярное выражение, предложенное в ответе bstpierre, '^(?P<status>\w+(in|out))/$' будет соответствовать helloin, good_byeout и т. Д.

Когда я впервые написал этот ответ в 2009 году, Джанго не смог отменить регулярные выражения, в которых использовался символ канала |. Однако это ограничение было снято с тех пор. Ограничение упоминается в 1.4 документах , но не в 1.5 документах , поэтому я предполагаю, что оно было изменено в Django 1.5.

1 голос
/ 02 октября 2009

Если вы хотите (in | out), то [], которое вы используете, указывает на класс символов, содержащий символы «i», «n», «|», «o», «u», «t».

...