django встраивание идентификатора пользователя в наилучшую практику шаблона URL - PullRequest
4 голосов
/ 26 ноября 2009

Я создаю навигационное меню в моем приложении django, и один из вариантов - «Моя учетная запись». У меня есть разные роли для пользователей, но для того, чтобы они все могли просматривать свой профиль, я использую общий URL-адрес, такой как http://mysite/user//profile.

Как лучше всего использовать Django для создания этого URL с помощью шаблонов?

Это просто что-то вроде:

<a href="/user/{{ user.id }}/profile">My Account</a>

Или это:

<a href="{{ url something something }}">My Account</a>

Не совсем уверен, какой синтаксис подходит для использования тега шаблона URL. Вот как выглядит мой URLconf:

(r'^user/(?P<user_id>\d+)/profile/$', user_profile)

Какая моя лучшая ставка?

Ответы [ 3 ]

8 голосов
/ 26 ноября 2009

Просмотрите именованные URL, вы можете найти официальную документацию django здесь .

Как правило, вы можете назвать свои URL-адреса в URL-адресе conf как:

url(r'^user/(?P<user_id>\d+)/profile/$', 'yourapp.views.view', name='user_url')

И тогда в любом шаблоне вы можете сделать это:

<a href="{% url user_url user.id %}">

Однако это сделает вашу структуру URL довольно уродливой, и для этого есть более эффективные способы. Например, вы можете просто перейти в / profile /, и идентификатор пользователя будет получен из текущего сеанса (каждый запрос имеет атрибут 'user', используйте его). Так, например, по вашему мнению, вы можете сделать это:

def myview(request):
    user = request.user

И впоследствии вы можете использовать эту информацию, чтобы делать то, что вы хотите. Гораздо приятнее, чем использование идентификаторов в URL, и вам не нужно беспокоиться о любых других проблемах безопасности, которые могут возникнуть.

2 голосов
/ 26 ноября 2009

Самый простой способ - определите метод get_absolute_url в вашей модели и используйте его вместе с декоратором permalink, если хотите.

0 голосов
/ 26 ноября 2009

Ваша первая попытка соответствует URL, указанному в вашем URLconf. Я бы тоже использовал этот подход.

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