组对象在我的详细视图中不起作用
Group objects not working in my detail view
我正在尝试从详细视图访问组对象,但出于一个原因,它没有将对象渲染到我的 HTML 模板,在详细视图中,除了组名称,但我也想能够渲染组封面图像和组用户。我会很感激一些帮助。这是我的详细视图。
def group_main(request, pk):
context= {}
group = get_object_or_404(Group,pk=pk)
context['group'] = group
return render(request,'group/grouptimeline.html',context)
这是模型
class Group(models.Model):
group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
member = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="members" )
cover = models.ImageField(upload_to='group_cover')
group_name = models.CharField(max_length=200, blank=True)
description = models.TextField(max_length=500, blank=True)
pic = models.ImageField(upload_to='path/post/img' ,blank=True)
date_posted = models.DateTimeField(auto_now_add=True)
这是我的详细信息 html 模板的一部分,它只呈现组名称,但我无法访问
小组封面图片和用户。
<div class="main_content">
<div class="mcontainer">
<div class="profile is_group">
<div class="profiles_banner">
<img src="{{ group.name.cover.url }}" alt="">
</div>
<div class="profiles_content">
<div class="profile_info">
<h1> {{ group.name }} </h1>
<p> Public group · 12k members</p>
</div>
<div class="flex items-center space-x-4">
<div class="flex items-center -space-x-4">
<img src="assets/images/avatars/avatar-5.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
<img src="assets/images/avatars/avatar-6.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
<div class="w-10 h-10 rounded-full flex justify-center items-center bg-red-100 text-red-500 font-semibold"> 12+
</div>
</div>
<a href="#" class="flex items-center justify-center h-9 px-5 rounded-md bg-blue-600 text-white space-x-1.5">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v2H7a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V7z"
clip-rule="evenodd"></path>
</svg>
<span> Join </span>
</a>
</div>
</div>
我建议将您的模型重命名为 GroupDetail
,否则会产生很多混乱,因为使用了两个模型:Group
来自 django.contrib.auth.models
,以及你自己定义的那个。
可能最好将其实现为:
class <strong>GroupDetail</strong>(models.Model):
group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
# …
然后在视图中,我们可以获取主键的 GroupDetail
s:
group = get_object_or_404(<strong>GroupDetail</strong>, pk=pk)
或者如果我们想使用引用的 Group
模型的主键,那么它是:
group = get_object_or_404(GroupDetail<strong>, group__pk=pk</strong>)
这意味着视图应该如下所示:
def group_main(request, pk):
context= {
<strong>'groupdetail'</strong>: get_object_or_404(GroupDetail, group__pk=pk)
}
return render(request,'group/grouptimeline.html',context)
此外,您正在使用 Group
对象上不存在的变量渲染 GroupDetail
对象。你应该渲染这些:
<img src="{{ groupdetail<strong>.cover.url</strong> }}" alt="">
<!-- … -->
<h1> {{ groupdetail<strong>.group_name</strong> }} </h1>
我正在尝试从详细视图访问组对象,但出于一个原因,它没有将对象渲染到我的 HTML 模板,在详细视图中,除了组名称,但我也想能够渲染组封面图像和组用户。我会很感激一些帮助。这是我的详细视图。
def group_main(request, pk):
context= {}
group = get_object_or_404(Group,pk=pk)
context['group'] = group
return render(request,'group/grouptimeline.html',context)
这是模型
class Group(models.Model):
group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
member = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name="members" )
cover = models.ImageField(upload_to='group_cover')
group_name = models.CharField(max_length=200, blank=True)
description = models.TextField(max_length=500, blank=True)
pic = models.ImageField(upload_to='path/post/img' ,blank=True)
date_posted = models.DateTimeField(auto_now_add=True)
这是我的详细信息 html 模板的一部分,它只呈现组名称,但我无法访问 小组封面图片和用户。
<div class="main_content">
<div class="mcontainer">
<div class="profile is_group">
<div class="profiles_banner">
<img src="{{ group.name.cover.url }}" alt="">
</div>
<div class="profiles_content">
<div class="profile_info">
<h1> {{ group.name }} </h1>
<p> Public group · 12k members</p>
</div>
<div class="flex items-center space-x-4">
<div class="flex items-center -space-x-4">
<img src="assets/images/avatars/avatar-5.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
<img src="assets/images/avatars/avatar-6.jpg" alt="" class="w-10 h-10 rounded-full border-2 border-white">
<div class="w-10 h-10 rounded-full flex justify-center items-center bg-red-100 text-red-500 font-semibold"> 12+
</div>
</div>
<a href="#" class="flex items-center justify-center h-9 px-5 rounded-md bg-blue-600 text-white space-x-1.5">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="w-5">
<path fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm1-11a1 1 0 10-2 0v2H7a1 1 0 100 2h2v2a1 1 0 102 0v-2h2a1 1 0 100-2h-2V7z"
clip-rule="evenodd"></path>
</svg>
<span> Join </span>
</a>
</div>
</div>
我建议将您的模型重命名为 GroupDetail
,否则会产生很多混乱,因为使用了两个模型:Group
来自 django.contrib.auth.models
,以及你自己定义的那个。
可能最好将其实现为:
class <strong>GroupDetail</strong>(models.Model):
group = models.OneToOneField(Group, on_delete=models.CASCADE, related_name='groups')
# …
然后在视图中,我们可以获取主键的 GroupDetail
s:
group = get_object_or_404(<strong>GroupDetail</strong>, pk=pk)
或者如果我们想使用引用的 Group
模型的主键,那么它是:
group = get_object_or_404(GroupDetail<strong>, group__pk=pk</strong>)
这意味着视图应该如下所示:
def group_main(request, pk):
context= {
<strong>'groupdetail'</strong>: get_object_or_404(GroupDetail, group__pk=pk)
}
return render(request,'group/grouptimeline.html',context)
此外,您正在使用 Group
对象上不存在的变量渲染 GroupDetail
对象。你应该渲染这些:
<img src="{{ groupdetail<strong>.cover.url</strong> }}" alt="">
<!-- … -->
<h1> {{ groupdetail<strong>.group_name</strong> }} </h1>