Конфигурация URL Джанго для DRYness - PullRequest
0 голосов
/ 29 июня 2010

Большинство представлений в моем проекте принимают необязательный параметр имени пользователя и, если существует, фильтруют наборы запросов, передаваемые шаблонам для этого пользователя. Так, например:

индексное представление обрабатывает оба следующих шаблона URL:

'^$' # general index page
'^(?P<username>[-\w]+)/$' # index page for the user

'^photos/$' # photo index page
'^(?P<username>[-\w]+)/photos/$' # photos for that user
...

Поскольку существует ряд таких приложений, кажется, не очень СУХОЙ реализовать ту же логику путем репликации шаблонов. Я подумал, что можно рекурсивно включить основной модуль urls.py, поэтому я сделал это:

url(r'^(?P<username>[-\w]+)/', include('urls')),

Мое рассуждение состояло в том, что, когда включен другой модуль URL, соответствующий шаблон удаляется из пути. Итак, я надеялся, что

'^(?P<username>[-\w]+)/photos/$'

станет

'^photos/$'

когда он сопоставляется рекурсивно включенным модулем urls с дополнительным параметром username. Но это заставило сервер разработки молча умереть, когда сделан запрос.

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

Что бы вы порекомендовали? Я слишком придирчив к СУХОСТИ?

Спасибо, Omat

1 Ответ

1 голос
/ 29 июня 2010

Просто определите регулярное выражение как строку в том же файле и уже используйте конкатенацию строк!

user_regex = r"^(?P<username>[-\w]+)/"

Затем вы можете выполнить регулярное выражение '%s/photos$'%user_regex, чтобы сохранить регулярное выражение только один раз, очень сухим.

Altho ', ваш аргумент в пользу включения шаблонов urls.py в тег url правильный , и я не уверен, почему это не удалось. Возможно, какая-то другая ошибка?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...