2014-12-14 2 views
0

Я новичок в Django и имею проблему с get_absolute_url в встроенном пользовательском объекте Django, используя его в шаблоне. Я использую Django 1.7.Пользователь django user.get_absolute_url не работает в шаблоне

так, то это в models.py:

def get_absolute_url(self): 
    return reverse('tests:profile', kwargs={'pk': self.pk}) 

в urls.py:

url(
    regex=r'^profile/(?P<pk>\d+)', 
    view = views.profile, 
    name='profile' 
) 

views.py:

def profile(req, pk): 

user = get_object_or_404(models.User, pk=pk) 
return render(req, 'accounts/profile.html', {'user': user}) 

и в шаблоне

<div class="container"> 
{% if user.is_authenticated %} 
    <a href="{{ user.get_absolute_url }}">{{ user.username }}</a> 
    <a href="{% url 'tests:logout' %}">Log out</a> 
{% else %} 
    <a href="{% url 'tests:login' %}">Log in</a> 
    <a href="{% url 'tests:register' %}">Sign up</a> 
{% endif %} 
{% block content %} 
{% endblock %} 

В html href пусто. Когда я использую {% url 'tests: profile' user.pk%}, он работает отлично, а на странице профиля, когда пользовательский объект не является встроенным Django, но из моего представления работает get_absolute_url. Вызов get_absolute_url из объектов в оболочке также работает так, как должно.

В примечаниях к выпуску 1.7 написано: «Определите метод get_absolute_url() для собственного пользовательского объекта пользователя или используйте ABSOLUTE_URL_OVERRIDES, если вы хотите URL-адрес для своего пользователя».

Так что мой метод должен работать, или я что-то неправильно понял? Как сделать работу get_absolute_url встроенного пользователя, как и ожидалось?

+1

Я не понимаю, где именно определяется ваш 'get_absolute_url'. Вы говорите, что это «в models.py», но тогда вы говорите, что это собственная модель пользователя Django, так как вы можете определить ее в классе, который вы не контролируете? Вы понимаете, что это метод и должен жить в соответствующем классе, не так ли? Поскольку вы используете встроенную модель, вы должны использовать альтернативу ABSOLUTE_URL_OVERRIDES, как указано в документе. –

+1

Благодарим вас за ответ. Да, мой плохой, я подклассифицировал модель пользователя django и думал, что django каким-то образом обработает мои методы. Теперь я пытаюсь использовать ABSOLUTE_URL_OVERRIDES как 'ABSOLUTE_URL_OVERRIDES = { 'auth.user': lambda u:"/profile /% s/"% u.pk, }' в settings.py, но это не похоже что-то изменить, должен ли я сделать что-то еще, чтобы сделать эту работу? ** UPD ** Я обновил до 1.7.1, и теперь все работает нормально. Еще раз, спасибо за помощь. –

+0

@fed_tf: Я преобразовал ваше решение в комментарий к ответу. – Flimm

ответ

0

Цитирование комментарий OP еще:

Я обновлен до версии 1.7.1 и теперь все работает отлично.

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