使用请求函数从 Django 模型渲染多个对象
Render multiple objects from Django model using request function
正在将一些职位列表添加到我的 Django 站点的首页。目前列出了 20 个工作用于测试目的。
我有一个相当简单的 Django 模型,其中包含作业状态(活动、非活动、存档)和创建作业列表的时间等属性,因此我可以按时间顺序排列这些。
我希望能够在页面顶部仅显示 4 个最近的职位,同时在此下方的列表中显示剩余的 16 个职位。
这是我目前所知道的...
Models.py
from django.db import models
class Job(models.Model):
ACTIVE = 'active'
INACTIVE = 'inactive'
ARCHIVED = 'archived'
CHOICES_STATUS = (
(ACTIVE, 'Active'),
(INACTIVE, 'Inactive'),
(ARCHIVED, 'Archived')
)
status = models.CharField(max_length=20, choices=CHOICES_STATUS, default=ACTIVE)
created_at = models.DateTimeField(auto_now_add=True)
为了在网站的首页上呈现作业,然后我在如下视图中引用作业模型。
Views.py
from django.shortcuts import render, redirect
from apps.job.models import Job
def frontpage(request):
jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4]
all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')
return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})
这确实使作业出现在首页上,但配置似乎是由最后一个请求决定的,即 all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')
。
我知道这一点,因为如果我从 frontpage.html
中删除 Bulma 的 <div class="column is-one-quarter">(我将其用作故障保护),django 会在页面顶部呈现所有 20 个帖子,而如果我使用 jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4]
作为最后一个请求,我在页面顶部看到了 4 个最新帖子,在这些帖子下方看到了相同的 4 个最新帖子。
问题是,I/how 能否在我的请求中引用相同的模型并期望 django return 所述模型中的一组不同的对象?
可以分享模板吗?无论如何,我想问题出在这里:
return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})
您正在尝试向字典添加两个相同的关键字:'jobs' 和 'jobs'。应该是这样的:
return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs})
然后在模板中使用作业和 all_jobs 对象
如前所述。
return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs})
和
在 'core/frontpage.html' .. 第二次 'jobs' 出现,您想列出所有工作的地方..将其替换为 'all_jobs'..
进一步解释,
- render() 的第三个参数是一个 dictionary.Its 调用的上下文。 (我猜)
- 它的键值对。引号中的是 keys.After ':' 是它的值。值可以是任何数据类型或对象。
- 这些键被发送到模板,即您正在呈现的 html 页面,此处 'core/frontpage.html'。
- 这些键可以用作模板(html 页面)中的变量,例如 .. 遍历它,如果它是一个可迭代的(像列表或像这里一样,一个查询集)
- 在您的代码中,您分配了键 'jobs' 两次..
{'jobs': jobs, 'jobs':all_jobs}
..第二个覆盖第一个。
正在将一些职位列表添加到我的 Django 站点的首页。目前列出了 20 个工作用于测试目的。 我有一个相当简单的 Django 模型,其中包含作业状态(活动、非活动、存档)和创建作业列表的时间等属性,因此我可以按时间顺序排列这些。
我希望能够在页面顶部仅显示 4 个最近的职位,同时在此下方的列表中显示剩余的 16 个职位。
这是我目前所知道的...
Models.py
from django.db import models
class Job(models.Model):
ACTIVE = 'active'
INACTIVE = 'inactive'
ARCHIVED = 'archived'
CHOICES_STATUS = (
(ACTIVE, 'Active'),
(INACTIVE, 'Inactive'),
(ARCHIVED, 'Archived')
)
status = models.CharField(max_length=20, choices=CHOICES_STATUS, default=ACTIVE)
created_at = models.DateTimeField(auto_now_add=True)
为了在网站的首页上呈现作业,然后我在如下视图中引用作业模型。
Views.py
from django.shortcuts import render, redirect
from apps.job.models import Job
def frontpage(request):
jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4]
all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')
return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})
这确实使作业出现在首页上,但配置似乎是由最后一个请求决定的,即 all_jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')
。
我知道这一点,因为如果我从 frontpage.html
中删除 Bulma 的 <div class="column is-one-quarter">(我将其用作故障保护),django 会在页面顶部呈现所有 20 个帖子,而如果我使用 jobs=Job.objects.filter(status=Job.ACTIVE).order_by('-created_at')[0:4]
作为最后一个请求,我在页面顶部看到了 4 个最新帖子,在这些帖子下方看到了相同的 4 个最新帖子。
问题是,I/how 能否在我的请求中引用相同的模型并期望 django return 所述模型中的一组不同的对象?
可以分享模板吗?无论如何,我想问题出在这里:
return render(request, 'core/frontpage.html', {'jobs': jobs, 'jobs':all_jobs})
您正在尝试向字典添加两个相同的关键字:'jobs' 和 'jobs'。应该是这样的:
return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs})
然后在模板中使用作业和 all_jobs 对象
如前所述。
return render(request, 'core/frontpage.html', {'jobs': jobs, 'all_jobs':all_jobs})
和
在 'core/frontpage.html' .. 第二次 'jobs' 出现,您想列出所有工作的地方..将其替换为 'all_jobs'..
进一步解释,
- render() 的第三个参数是一个 dictionary.Its 调用的上下文。 (我猜)
- 它的键值对。引号中的是 keys.After ':' 是它的值。值可以是任何数据类型或对象。
- 这些键被发送到模板,即您正在呈现的 html 页面,此处 'core/frontpage.html'。
- 这些键可以用作模板(html 页面)中的变量,例如 .. 遍历它,如果它是一个可迭代的(像列表或像这里一样,一个查询集)
- 在您的代码中,您分配了键 'jobs' 两次..
{'jobs': jobs, 'jobs':all_jobs}
..第二个覆盖第一个。