2010-11-10 3 views
2

Все примеры, которые я могу найти в urlpatterns для сайтов django, имеют отдельную запись для входящих URL-адресов, у которых нет главной косой черты или корневой папки. Затем они обрабатывают подпапки на каждой отдельной строке. Я не понимаю, почему простойDjango urlpatterns разочаровывает проблему с завершающими косыми чертами

/? 

Регулярное выражение не позволяет им находиться на одной простой линии.

Рассмотрите следующее, назовем проект Django Baloney и имя приложения - Cheese. Таким образом, в проекте urls.py у нас есть что-то вроде этого, чтобы позволить приложениям urls.py обрабатывать его запросы ...

urlpatterns = patterns('', 
    (r'^cheese/', include('Baloney.Cheese.urls')), 
) 

затем внутри urls.py сыра приложений, я не понимаю, почему это одна простая линия не вызовет, как верно для всех входящих URL-адрес подпутей, включая пустое значение ...

urlpatterns = patterns('', 
    (r'^(?P<reqPath>.*)/?$', views.cheeseapp_views), 
) 

Вместо этого он соответствует пустому случаю, но не случай значения настоящего. Так что ...

http://baloneysite.com/cheese/  --> MATCHES THE PATTERN 
http://baloneysite.com/cheese/swiss --> DOES NOT MATCH 

В основном я хочу, чтобы захватить переменную reqPath включить все, что там (даже пустой или «»), но не включая любой слэш, если есть один.

URL-адреса являются динамическими пулями, вытащенными из БД, поэтому я делаю все совпадение с содержанием в своих представлениях и просто нуждаюсь в шаблонах url для пересылки значений. Я знаю, что следующие работы, но не понимаю, почему это не все могут быть помещены в одну строку с помощью /? регулярное выражение перед знаком $.

(r'^$', views.cheeseapp_views, {'reqPath':''}), 
(r'^(?P<reqPath>.*)/$', views.cheeseapp_views), 

Оцените любые идеи.

+0

Я не могу ответить на ваш вопрос, но я уверен, что вы имели в виду r '^ (? P . *?) /? $'. В противном случае ваш конечный слэш всегда будет включен в reqPath. – cababunga

+0

Я делаю это «все время», и он всегда работает. Вы ввели здесь свой точный код? –

+0

cababunga - какой дополнительный знак вопроса после. * Делаю? . * является регулярным выражением для 0 или символом gazillion. ??? – sansjoe

ответ

9

Я просто попробовал аналогичный образец, и он работал так, как вы его написали. Не нужно, чтобы/?,. * Соответствовало бы этому. Какая именно ошибка вы получаете? Может быть, у вас есть свое мнение без параметра запроса? То есть views.cheeseapp_views должно быть что-то вроде:

def cheeseapp_views(request, reqPath): 
    ... 

Edit:

Шаблон, который вы предложили уловы косую черту в reqPath, потому что оператор * жаден (обратите внимание на docs.python.org/library/ re.html). Попробуйте это вместо:

(r'^(?P<reqPath>.*?)/?$', views.cheeseapp_views) 

примечание это. *? а не. * сделать его неживым.

+0

Я не хочу, чтобы. * Включал трейлинг-косую черту, если она есть. /? не работает, и мой вопрос - почему нет. домен.com/baloney/cheese/-> хочу, чтобы это соответствовало, и reqPath would = '' domain.com/balony/cheese/ANYTHINGELSE-OR/9382091/etcetc/ -> хочу, чтобы это соответствовало, и reqPath = = ANYTHINGELSE- OR/9382091/etcetc» Я не понимаю, почему модель я предложил не допустить этого ... (г '^ (? P . *) /? $', views.cheeseapp_views) – sansjoe

+0

OK , во-первых - регулярное выражение, которое вы указали, соответствует URL-адресу. Когда вы сказали «НЕ МАТЧА» в вашем вопросе, я думал, что это совсем не совпадает, т. Е. Вы получаете «Страница не найдена (404)» из Django. Вот что я имел в виду, когда я ответил. Во-вторых, шаблон, который вы предложили, улавливает конечную косую черту в reqPath, потому что оператор operator является жадным (см. Http://docs.python.org/library/re.html). Попробуйте это вместо: '(r '^ (? P . *?) /? $', Views.cheeseapp_views)' - обратите внимание на это. *? а не. * сделать его неживым. –

+0

благодарит миллион за этот отличный ответ и ответ. Если вы опубликуете свой комментарий в качестве ответа, я обязательно буду отмечать его как ответ на этот вопрос. Я просмотрел страницу документов RE Python довольно, но не дошел до этого важного уровня детализации. Действительно ценю это. – sansjoe

 Смежные вопросы

  • Нет связанных вопросов^_^