我在我的网站上有一个“我的帐户”的链接。
{% 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_usermodels.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 })但是当我点击'My account‘链接时,我会得到这个错误
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提供的错误消息找到错误。谁来帮帮我
发布于 2019-03-25 16:22:51
默认情况下,DetailView的URL模式查找一个名为pk的ID字段。
您可以将您的URL模式更改为:url(r'^users/(?P<pk>\d+)$', views.UserDetailView.as_view(), name='user_detail'),
...or将类上的pk_url_kwarg设置为:
class UserDetailView(DetailView):
context_object_name = 'es_user'
model = es_user
pk_url_kwarg = 'id'发布于 2019-03-25 16:25:05
来自django文件:
链接:https://docs.djangoproject.com/en/2.1/topics/class-based-views/generic-display/
这里的URLconf使用命名组pk -这个名称是默认名称,>DetailView用于查找用于筛选查询集的主键的值。 如果您想要将组称为其他东西,可以在>视图上设置pk_url_kwarg。更多细节可在DetailView参考资料中找到。
发布于 2019-03-25 17:23:36
我做了以下的改变,现在一切都很好!
views.py
class UserDetailView(DetailView):
context_object_name = 'es_user'
model = es_user
pk_url_kwarg = 'id'在主页中,指向“My account”的链接更改为
{% 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 })https://stackoverflow.com/questions/55342153
复制相似问题