Столкнувшись с проблемой со схемой URL-адреса профиля пользователя, такой как example.com/username в django

В приложении django мне нужно создать URL-адреса профиля пользователя Twitter со следующей структурой, например:

  • example.com/<username>
  • example.com/<username>/friends
  • example.com/<username>/blog
  • example.com/<username>/some-page
  • example.com/<username>/some-other-page

Мой urls.py:

urlpatterns = patterns('profiles.views',
    url(r'^(?P<account_name>[a-zA-Z0-0_.-]+)/$', 'show_profile', name='profiles_show_profile'),
    url(r'^(?P<account_name>[a-zA-Z0-0_.-]+)/friends/$', 'show_friends', name='profiles_show_blog'),
    url(r'^(?P<account_name>[a-zA-Z0-0_.-]+)/blog/$', 'show_blog', name='profiles_show_blog'),
)

Моя первая проблема заключается в том, что example.com/<username> работает нормально, а example.com/<username>/any-other-page нет. Все они оказываются в show_profile представлении, а не в своем собственном.

Примечание. Все работает нормально, если я заставляю URL-адреса изменять структуру URL-адресов на example.com/user/<username>.

Что я здесь делаю неправильно? Пожалуйста, порекомендуйте.

Во-вторых, я хотел бы получить рекомендации по лучшим практикам django (подводные камни, ловушки и т. д.) при работе со схемами URL-адресов, где первая часть сама по себе является переменной.

Спасибо


person Mir Nazim    schedule 12.09.2010    source источник
comment
0-0 в вашем регулярном выражении странное: я думаю, вы имеете в виду 0-9, хотя это не ваша проблема.   -  person Ned Batchelder    schedule 12.09.2010
comment
Да, была опечатка в моем коде. Исправлено. Спасибо.   -  person Mir Nazim    schedule 12.09.2010


Ответы (1)


Я не понимаю, почему ваши URL-адреса не работают. Вы можете попробовать переместить первый шаблон в конец, чтобы другие шаблоны могли совпадать первыми. Проблема, которую вы описываете, звучит как example.com/user/any-page, шаблон соответствует имени учетной записи «пользователь/любая страница». Регулярное выражение, которое вы показываете, этого не сделает, но, может быть, ваш реальный код немного отличается?

person Ned Batchelder    schedule 12.09.2010