Django:获取多个模型
这是我使用Django的第一个项目,我想将我的静态HTML/CSS/js站点重新创建为一个带有管理面板的动态站点。 然而,我很难理解视图/URL。在我的索引中,我有主要新闻、事件、迷你新闻-3个类别。我可以呈现mainnews,但是,我不确定其他2个(所有3个都在属于索引页面上)的“返回”是什么。目前,我有“索引”,但没有显示事件/新闻 页面>视图.pyDjango:获取多个模型,django,Django,这是我使用Django的第一个项目,我想将我的静态HTML/CSS/js站点重新创建为一个带有管理面板的动态站点。 然而,我很难理解视图/URL。在我的索引中,我有主要新闻、事件、迷你新闻-3个类别。我可以呈现mainnews,但是,我不确定其他2个(所有3个都在属于索引页面上)的“返回”是什么。目前,我有“索引”,但没有显示事件/新闻 页面>视图.py from django.shortcuts import render, redirect, get_object_or_404 from m
from django.shortcuts import render, redirect, get_object_or_404
from mainnews.models import Mainnews
from events.models import Event
from mininews.models import Mini
# Create your views here.
def home_view(request):
main_news = Mainnews.objects.order_by('-publish_date').filter(is_published = True)[:1]
context = {
'main_news' : main_news
}
return render(request, 'index.html', context)
def event_view(request):
events = Event.objects.order_by('-publish_date').filter(is_published = True)[:3]
context = {
'events' : events
}
return render(request, 'index.html', context)
def mini_view(request):
mini_news = Mini.objects.order_by('-publish_date').filter(is_published = True)[:4]
context = {
'mini_news' : mini_news
}
return render(request, 'index.html', context)
main>url.py
from django.contrib import admin
from django.urls import path, include
from django.conf import settings
from django.conf.urls.static import static
from pages.views import home_view, event_view, mini_view
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
path('', event_view, name = 'home'),
path('', mini_view, name = 'home'),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
这就是html的外观
{% block content %}
<!-- Section 2 News and Events -->
<div id="news-container">
<div class="jumbo-news">
{%if main_news%}
{% for obj in main_news%}
<img id = 'jumboImgUrl' class='jumbo-img'
src="{{ obj.image.url }}">
<h2 id = 'jumboTitle' class='jumbo-title'>{{ obj.title }}</h2>
<h4 id = 'jumboDescription' class='jumbo-parag'>{{ obj.description }}</h4>
{% endfor %}
{% else %}
<div class = 'col-md-12'>
<p>No news available</p>
</div>
{% endif %}
</div>
<div id="events" class='eventBox'>
<h3 class='events-title'>Events <i class="far fa-calendar-alt"></i></h3>
<div id = 'allEvents' class='all-events'>
{% if events%}
{% for event in events %}
<div id='event' class='event'>
<div class='event-date'>
<h4 class='date-helper'>{{ event.days }}</h4>
<div class='event-line'></div>
<h4 class = 'date-month'>{{ event.month }}</h4>
</div>
<div class = 'paragrah'><p id = 'eventDesc' class='event-text'>{{ event.description}}</p></div>
</div>
{% endfor %}
{% else %}
<div>
<p>No events available</p>
</div>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{%block content%}
{%if主新闻%}
{main_news%}
{{obj.title}}
{{obj.description}}
{%endfor%}
{%else%}
没有消息
{%endif%}
事件
{%if events%}
{events%%中事件的百分比}
{{event.days}
{{event.month}
{{event.description}
{%endfor%}
{%else%}
没有可用的活动
{%endif%}
{%endblock%}
好的,在django中,url必须仅连接到views.py中的一个函数或类(无关紧要)。但您正在连接3条不同的路径(考虑一条,尽管名称相同)想象一下,如果我为你的网站主页设置一个请求,比如www.yoursite.come/
你想如何区分这三个,以及如何选择使用哪一个。但是你可以在一个函数中设置查询,设置的数量与你想要的数量相同,如下所示:
def home_view(request):
main_news = Mainnews.objects.order_by('publish_date').filter(is_published = True)[:1]
events = Event.objects.all().order_by('-publish_date').filter(is_published = True)[:3]
mini_news = Mini.objects.order_by('-publish_date').filter(is_published = True)[:4]
context = {
'main_news' : main_news,
'events' : events,
'mini_news': mini_news
}
return render(request, 'index.html', context)
在你的网址上
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
然后在模板中显示所有内容。如果你想单独显示,你可以保留你的代码,只需把url改成这个
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
path('event_view/', event_view, name = 'event_view'),
path('mini_view', mini_view, name = 'mini_view'),
]
urlpatterns = [
path('admin/', admin.site.urls),
path('', home_view, name = 'home'),
path('event_view/', event_view, name = 'event_view'),
path('mini_view', mini_view, name = 'mini_view'),
]