Django:获取多个模型

Django:获取多个模型,django,Django,这是我使用Django的第一个项目,我想将我的静态HTML/CSS/js站点重新创建为一个带有管理面板的动态站点。 然而,我很难理解视图/URL。在我的索引中,我有主要新闻、事件、迷你新闻-3个类别。我可以呈现mainnews,但是,我不确定其他2个(所有3个都在属于索引页面上)的“返回”是什么。目前,我有“索引”,但没有显示事件/新闻 页面>视图.py from django.shortcuts import render, redirect, get_object_or_404 from m

这是我使用Django的第一个项目,我想将我的静态HTML/CSS/js站点重新创建为一个带有管理面板的动态站点。 然而,我很难理解视图/URL。在我的索引中,我有主要新闻、事件、迷你新闻-3个类别。我可以呈现mainnews,但是,我不确定其他2个(所有3个都在属于索引页面上)的“返回”是什么。目前,我有“索引”,但没有显示事件/新闻

页面>视图.py

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'),
]