Я новичок в 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 встроенного пользователя, как и ожидалось?
Я не понимаю, где именно определяется ваш 'get_absolute_url'. Вы говорите, что это «в models.py», но тогда вы говорите, что это собственная модель пользователя Django, так как вы можете определить ее в классе, который вы не контролируете? Вы понимаете, что это метод и должен жить в соответствующем классе, не так ли? Поскольку вы используете встроенную модель, вы должны использовать альтернативу ABSOLUTE_URL_OVERRIDES, как указано в документе. –
Благодарим вас за ответ. Да, мой плохой, я подклассифицировал модель пользователя django и думал, что django каким-то образом обработает мои методы. Теперь я пытаюсь использовать ABSOLUTE_URL_OVERRIDES как 'ABSOLUTE_URL_OVERRIDES = { 'auth.user': lambda u:"/profile /% s/"% u.pk, }' в settings.py, но это не похоже что-то изменить, должен ли я сделать что-то еще, чтобы сделать эту работу? ** UPD ** Я обновил до 1.7.1, и теперь все работает нормально. Еще раз, спасибо за помощь. –
@fed_tf: Я преобразовал ваше решение в комментарий к ответу. – Flimm