我是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? 如果是,我在做什么错了?
谢谢!
答案 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
中访问posts
和post_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”中,您可以同时获取posts
和highlights
答案 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})