Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2018 16:27:23

Rn4
Зарегистрирован: 2018-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django / ссылка на профиль пользователя

Привет, помогите пожалуйста решить следующую проблему:

При регистрации создается новый профиль пользователя, необходимо чтобы ссылка в шаблоне вела на страницу его профиля. Пробовал разными способами передать в ссылку PK профиля, но видимо что-то упустил и не могу понять как это сделать правильно.

Пробовал так:

 {% url 'profile' pk=user.id %}
и это работает, но на другой странице появляется ошибка: Reverse for ‘profile’ with keyword arguments ‘{’pk': None}' not found.

models

 class UserProfileM(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True, unique=True)
    def __str__(self):
        return self.user.username
def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = UserProfileM.objects.create(user=kwargs['instance'])
post_save.connect(create_profile, sender=User) 

view

 class profile(DetailView):
    model = UserProfileM
    template_name = 'profile.html'
    context_object_name = 'user_profile'

url

 urlpatterns = [
    path('', views.index, name='index'),
    path('accounts/', include('allauth.urls')),
    path('add-offer', views.addOffer, name='addOffer'),
    path('accounts/profile/<int:pk>/', views.profile.as_view(), name='profile')
]

Отредактировано Rn4 (Июль 4, 2018 16:28:50)

Офлайн

#2 Июль 5, 2018 02:17:29

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Django / ссылка на профиль пользователя

{% url ‘profile’ user.id %}
в переменную само подставится

Офлайн

#3 Июль 5, 2018 12:01:37

Rn4
Зарегистрирован: 2018-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django / ссылка на профиль пользователя

VadimK
{% url ‘profile’ user.id %}в переменную само подставится
Попробовал, получаю ошибку:
 TypeError at /accounts/profile/1/
get() got an unexpected keyword argument 'pk'

Отредактировано Rn4 (Июль 5, 2018 12:01:55)

Офлайн

#4 Июль 5, 2018 16:34:54

VadimK
Зарегистрирован: 2013-07-03
Сообщения: 199
Репутация: +  16  -
Профиль   Отправить e-mail  

Django / ссылка на профиль пользователя

Какая версия джанги ? И где ошибка получается, при рендеринге темплейта в котором формируется ссылка не профиль или при заходе в сам профиль ?

И судя по url правилам, возможно срабатывает какой то адрес в “path('accounts/', include('allauth.urls')),”. Т.е. эту конструкцию по хорошему надо ставить после “path('accounts/profile/<int:pk>/', views.profile.as_view(), name='profile')”

Офлайн

#5 Июль 8, 2018 19:46:48

Rn4
Зарегистрирован: 2018-07-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Django / ссылка на профиль пользователя

Версия Django 2.0.0
Ошибка возникает вообще на другой странице add-offer, которая казалось бы не имеет отношения к профилю.

Убрал из файла add-offer.html строчку

 {% extends "base.html" %}
и все заработало.

По какой-то причине этот файл конфликтует с конкретной ссылкой
 {% url 'profile' user.id %}
из файла base.html и выдает ошибку:

NoReverseMatch at /add-offer/
Reverse for ‘profile’ with keyword arguments ‘{’pk': None}' not found. 1 pattern(s) tried: ['accounts\\/profile\\/(?P<pk>+)\\/$']


Отредактировано Rn4 (Июль 8, 2018 23:13:23)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version