如何解决Django 显示每个用户的个人资料
我正在建立一个网站,主页上有一个表格,表格中有人们的姓名、号码、类别、居住的城市等。
我想创建一个链接,当访问者点击任何用户的名字时,访问者会被定向到该特定用户的个人资料页面。现在,我的代码部分工作。当我点击任何用户时,我会被重定向到 http://127.0.0.1:8000/profile/7/。 “7”的用户ID号是登录用户的ID。所以无论我点击哪个用户,我都会被重定向到登录用户的个人资料页面。
此外,当我退出当前登录的用户时,我收到此错误消息:“NoReverseMatch at / Reverse for 'profile_pk' with keyword arguments '{'pk': None}' not found。1模式尝试:['profile/(?P[0-9]+)/$']"
这是我到目前为止对代码所做的:
views.py
def ustaprofil(request,pk=None):
if pk:
user = get_object_or_404(User,pk=pk)
else:
user = request.user
args = {'user': user}
return render(request,'user.html',args)
def ustalist(request): #view that renders the table
usta = Usta.objects.all()
return render(request,'home.html',{'usta': usta})
urls.py
path('profile/<int:pk>/',views.ustaprofil,name='profile_pk'),
models.py
class Usta(models.Model):
user = models.OneToOneField(User,null=True,on_delete=models.CASCADE)
gizlilik_sozlesmesi = models.BooleanField("Gizlilik Sozlesmesini Okudum Onayliyorum*",null=True)
sartlar_sozlesmesi = models.BooleanField("Sartlar ve Kosullar Sozlesmesini Okudum Onayliyorum*",null=True)
isim = models.CharField(max_length=100)
kategori = models.ForeignKey(Category,on_delete=models.SET_NULL,null=True)
website = models.CharField(max_length=200,null=True)
eposta = models.CharField(max_length=200,null=True)
telefon = models.CharField(max_length=200,null=True)
aciklama = models.TextField(max_length=1000,null=True)
il = models.ForeignKey(Il,null=True)
ilce = models.ForeignKey(Ilce,null=True)
resim = models.ImageField(default='ananas.jpg',upload_to='profile_images')
def __str__(self):
return self.isim
home.html(指向每个用户个人资料的链接所在的位置)
<script>
function LinkFormatter(value,row,index) {
return "<a href='{% url 'profile_pk' pk=user.pk %}'>"+value+"</a>";
}
</script>
<tr>
<th data-formatter="LinkFormatter" data-field="isim" data-filter-control="input" data-sortable="true">Isim</th>
<th data-formatter="LinkFormatter" data-field="kategori" data-filter-control="select" data-sortable="true">Kategori</th>
<th data-formatter="LinkFormatter" data-field="il" data-filter-control="select" data-sortable="true">Il</th>
<th data-formatter="LinkFormatter" data-field="ilce" data-filter-control="select" data-sortable="true">Ilce</th>
<th data-formatter="LinkFormatter" data-field="telefon" data-filter-control="input" data-sortable="true">Telefon</th>
<th data-formatter="LinkFormatter" data-field="profil"><a href="profile/">Profili Gor</a></th>
</tr>
最后,user.html(用户的个人资料页面模板):
{% block content %}
<div class="row my-4">
<div class="col-md-4"></div>
<div class="col-md-8">
<div class="card">
<div class="card-header bg-info text-white">
Usta Profil Sayfasi
</div>
<div class="row p-3">
<div class="col-md-8">
<table class="table table-borderless">
<thead>
<span class="h4">{{ user.username }} profili</span class="h4">
<a class="btn btn-info btn-sm float-right" href="{% url 'user-profile-update' %}">Duzenle</a>
<hr>
</thead>
<tbody>
<div class="col-md-4">
<img class="img-thumbnail" src="{{ user.usta.resim.url }}" alt="profile-image">
</div>
<tr>
<th scope="row">Kullanici Ismi</th>
<td>{{ user.username }}</td>
</tr>
<tr>
<th scope="row">Firma veya Usta Adi</th>
<td>{{ user.usta.isim }}</td>
</tr>
<tr>
<th scope="row">Kategori</th>
<td>{{ user.usta.kategori }}</td>
</tr>
<tr>
<th scope="row">Website</th>
<td>{{ user.usta.website }}</td>
</tr>
<tr>
<th scope="row">E-Posta</th>
<td>{{ user.usta.eposta }}</td>
</tr>
<tr>
<th scope="row">Phone</th>
<td>{{ user.usta.telefon }}</td>
</tr>
<tr>
<th scope="row">Aciklama</th>
<td>{{ user.usta.aciklama }}</td>
</tr>
<tr>
<th scope="row">Il</th>
<td>{{ user.usta.il }}</td>
</tr>
<tr>
<th scope="row">Ilce</th>
<td>{{ user.usta.ilce }}</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
所以我有两个具体问题:
- 如何让我的代码根据每个用户的 ID 打开每个用户的个人资料页面。 http://127.0.0.1:8000/profile/7/'s 个人资料,当我点击用户 7 的个人资料链接时,http://127.0.0.1:8000/profile/8/'s 个人资料,当我点击用户 8 的个人资料链接时。
- 如何解决“NoReverseMatch”错误?我认为该错误是因为我没有登录任何用户,它无法显示指向任何已登录用户个人资料的任何链接,因为我没有登录任何用户。
解决方法
您不能将 JS 执行与 Django 模板混合使用,模板将不会执行 JS 代码。 linkformatter 将始终返回与 user.pk 相同的值是 request.user.pk
这是一个示例模板
<table>
{% for user in usta%}
<tr>
<td><a href=‘{%url ‘profile_pk’ user.id%}’> {{user.username}}</a>
</td></tr>
{%endfor%}
</table>
,
您没有将用户 PK 传递给模板。
,我解决了。只需观看 Dennis Ivy 关于创建动态 URL 的视频。 https://www.youtube.com/watch?v=HhjnQIpXqPc&list=PL-51WBLyFTg2vW-_6XBoUpE7vpmoR3ztO&index=9
视频分为两部分,请务必观看这两部分。在我丹尼斯解释之前,一切似乎都很复杂!原来如此简单!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。