如何在.html中实现两个QuerySet

时间:2019-07-03 15:30:41

标签: html django django-models django-views

我是Django的新手,正试图了解它的工作原理。 基本上,我正在构建一个简单的Blog,并且在我的.html文件中有一个关于QuerySet的实现的问题。

这是我的代码的样子:

Models.py

class Post(models.Model):
        [...]

class Highlight(models.Model):
        [...]

Views.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post
from .models import Highlight

def post_list(request):
    posts = Post.objects.all
    return render(request, 'blog/post_list.html', {'posts': posts})

def highlight_list(request):
    highlights = Highlight.objects.all
    return render(request, 'blog/post_list.html', {'highlights': highlights})

Urls.py

from django.urls import path
from . import views

urlpatterns = [

path('', views.post_list, name='post_list'),
path('', views.highlight_list, name='highlight_list'),
]

post_list.html

{% for post in posts %}
{{ post }}
{% endfor %}

{% for highlight in highlights %}
{{ highlight }}
{% endfor %}

问题是,它仅显示Post类中的对象。 是否可以同时包含两个类的两个QuerySet? 如果是,我在做什么错了?

谢谢!

3 个答案:

答案 0 :(得分:1)

有很多方法可以实现这一目标。我提到一个

def post_list(request):
    posts = Post.objects.all()
    highlights = Highlight.objects.all()
    return render(request, 'blog/post_list.html', {'posts': posts, 'highlights':highlights})

然后,您可以在highlights中访问postspost_list.html

答案 1 :(得分:0)

点击网址127.0.0.1:8000时,匹配的第一个网址是path('', views.post_list, name='post_list'),因为在您的urls.py中,这是您的第一个网址。当有多个比赛时,总是会第一个被叫。

因此,被调用的视图函数是post_list

在您的post_list中,您仅检索Post对象,这就是为什么当您返回html时,仅渲染Post对象,而没有highlight对象。

这就是为什么在前端找不到任何highlight对象的原因。

您可以执行以下操作:

def post_response_with_highlight(request):
    posts = Post.objects.all
    highlights = Highlight.objects.all
    context = {
        'posts': posts,
        'highlights': highlights
    }
    return render(request, 'blog/post_list.html', {'context': context})

现在,在您的“ html”中,您可以同时获取postshighlights

答案 2 :(得分:0)

已经管理好了,谢谢! 如果其他人有问题,请采用以下解决方案:

Views.py

from django.shortcuts import render
from django.utils import timezone
from .models import Post
from .models import Highlight

def post_list(request):
    posts = Post.objects.all
    highlights = Highlight.objects.all
    return render(request, 'blog/post_list.html', {'posts': posts, 'highlights': highlights})