我在我的网站上具有指向“我的帐户”的链接
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'user_detail' id=request.user.id %}">My Account</a>
{% endif%}
在我的 urls.py 上,我有这行
url(r'^users/(?P<id>\d+)$', views.UserDetailView.as_view(), name='user_detail'),
views.py
class UserDetailView(DetailView):
context_object_name = 'es_user'
model = es_user
models.py
class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
def get_absolute_url(self):
print("self.user.id=",self.user.id)
return reverse('user_detail', kwargs={'id': self.user.id })
但是,当我单击“ 我的帐户”链接时,出现此错误
AttributeError at /users/3
Generic detail view UserDetailView must be called with either an object pk or a slug in the URLconf.
此处3是当前登录用户的ID,因为该用户登录request.user.id
在此行<a class="nav-link" href="{% url 'user_detail' id=request.user.id %}">My Account</a>
上未返回任何空值。
我无法使用django提供的错误消息找到错误。有人帮我
答案 0 :(得分:0)
默认情况下,DetailView
的URL模式查找名为pk
的ID字段。
您可以将网址格式更改为:
url(r'^users/(?P<pk>\d+)$', views.UserDetailView.as_view(), name='user_detail'),
...或在您的班级上将pk_url_kwarg
设置为以下内容:
class UserDetailView(DetailView):
context_object_name = 'es_user'
model = es_user
pk_url_kwarg = 'id'
答案 1 :(得分:0)
从Django文档中:
链接:https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/
此处的URLconf使用命名的组pk-该名称是> DetailView用于查找用于过滤查询集的主键值的默认名称。
如果您想给该群组打电话,可以在>视图上设置pk_url_kwarg。可以在DetailView的参考中找到更多详细信息
答案 2 :(得分:0)
我进行了以下更改,现在一切正常!
views.py
class UserDetailView(DetailView):
context_object_name = 'es_user'
model = es_user
pk_url_kwarg = 'id'
主页上的“ 我的帐户”链接已更改为
{% if user.is_authenticated %}
<a class="nav-link" href="{% url 'user_detail' id=request.user.es_user.id %}">My Account</a>
{% endif%}
models.py
class es_user(models.Model):
user = models.OneToOneField(User,related_name='es_user', on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('user_detail', kwargs={'id': self.pk })