Python Django:对象未加载到HTML模板中

Python Django:对象未加载到HTML模板中,python,django,Python,Django,我正在制作我的Django网站,根据我的第一个网站模板我的主页,我遇到了一个问题 环境: Django 2.0.1 Python 3.5 MariaDB 10.1 问题: 当我可以访问我的Django主页时,根据我的视图,它应该会显示一个图像,但我什么也得不到。只有当我去其他地方并回到主页时,我才能得到我的照片 我的代码: 我的模特 class Photo(models.Model) : Nom = models.CharField(max_length

我正在制作我的Django网站,根据我的第一个网站模板我的主页,我遇到了一个问题

环境: Django 2.0.1 Python 3.5 MariaDB 10.1 问题: 当我可以访问我的Django主页时,根据我的视图,它应该会显示一个图像,但我什么也得不到。只有当我去其他地方并回到主页时,我才能得到我的照片

我的代码: 我的模特

class Photo(models.Model) :

    Nom                 = models.CharField(max_length=50, verbose_name="Nom de l'objet", blank=False)
    Date                = models.DateField()
    ...
    Image_upload        = models.ImageField(upload_to='Media/', width_field=None, height_field=None, verbose_name="Image")
My views.py:

from django.shortcuts import render
from Photographies.models import Photo


def Accueil(request):
    photo = Photo.objects.all().order_by('-Date')[0]

    return render(request, 'Accueil.html', {"photo": photo})
我的HTML模板:

<!--  This script lets to define homepage template for "Accueil" -->

{% extends 'Base_Accueil.html' %}

{% load staticfiles %}
{% load static %}

{% block content %}

        <div id="content">

            <br></br>

            <div id="content-1">

               <div id="presentation-title">
                    <p>Petit mot de l'Astrophotographe & Développeur du site</p>
               </div>
               <div id="presentation-text">
                    <p>  Je vous souhaite la bienvenue sur mon site dédié à l'Astrophotographie. A travers votre parcours sur celui-ci, vous allez découvrir ma passion pour la photographie des objets de l'Univers. Du Soleil, notre étoile, aux galaxies les plus lointaines en passant par les vastes amas de gaz qui composent l'infiniment grand, vous allez pouvoir contempler des objets atypiques de part leurs formes et leurs couleurs.</p><br />

                    <p> C'est avec plaisir que je vous invite à vous ballader sur mon site, découvrir ma galerie d'images, mes bricolages, mes articles & publications, ... Vous trouverez également le matériel astronomique employé pour la réalisation des différents clichés disponibles sur ce site ainsi que diverses informations complémentaires. N'hésitez pas à partager vos avis et à venir le visiter régulièrement pour entrevoir les nouvelles images astrophotographiques.</p><br />

                    <p align="center">Je vous souhaite une bonne visite !</p>   
               </div> 
            </div>

            <br></br>

            <div class="row">
            </div>

            <div id="content-2">
                <div id="presentation-image-récente">
                    <p>Dernière image publiée</p>
                </div>
                <div id="presentation-image">
                        <li class="image">
                            <img src='{{photo.Image_upload.url}}'/>
                            <p></p> 
                            <figcaption>
                            <div>
                                <center>
                                <p></p>
                                <p><b>{{photo.Nom}} ({{photo.Designation}})</b></p>


                                </center>
                            </div>
                            </figcaption>
                        </li>
                </div>
            </div>

            <div class="row">
            </div>
            <br></br>

        </div>
        <p></p>

{% endblock content %}
我的全局URL.py文件如下所示:

import os
from django.conf.urls import url, include
from django.contrib import admin
from django.views.generic.base import TemplateView
from django.conf import settings
from django.conf.urls.static import static


urlpatterns = [
    url(r'^$', TemplateView.as_view(template_name=os.path.join(settings.BASE_DIR, 'Accueil/templates/Accueil.html')), name='accueil'),
    url(r'^admin/', admin.site.urls),
    url(r'^Accueil/', include('Accueil.urls')),
    url(r'^Materiel/', include('Materiel.urls')),
    url(r'^Photographies/', include('Photographies.urls')),
    url(r'^Articles/', include('Articles.urls')),
    url(r'^Meteo/', include('Meteo.urls')),
    url(r'^Presentation/', include('Presentation.urls')),
    url(r'^Contact/', include('Contact.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
根据这一行,我怀疑存在问题:

url(r'^$', TemplateView.as_view(template_name=os.path.join(settings.BASE_DIR, 'Accueil/templates/Accueil.html')), name='accueil'),
因为url只是:
如果我写作,它与我的主页模板相同,但与我加载的图片相同。

我找到了解决方案:

我更改我的views.py文件:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^Accueil$', views.Accueil, name='Accueil'),
]
from django.views.generic.base import TemplateView
from Photographies.models import Photo


class AccueilTemplateView(TemplateView):

    template_name = "Accueil.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['photo'] = Photo.objects.all().order_by('-Date')[0]

        return context
from django.conf.urls import url, include
from django.urls import path
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

from Accueil.views import AccueilTemplateView


urlpatterns = [
    path(r'', AccueilTemplateView.as_view(), name='accueil'),
    url(r'^admin/', admin.site.urls),
    url(r'^Accueil/', include('Accueil.urls')),
    url(r'^Materiel/', include('Materiel.urls')),
    url(r'^Photographies/', include('Photographies.urls')),
    url(r'^Articles/', include('Articles.urls')),
    url(r'^Meteo/', include('Meteo.urls')),
    url(r'^Presentation/', include('Presentation.urls')),
    url(r'^Contact/', include('Contact.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
然后,在我的全局URL.py文件中:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^Accueil$', views.Accueil, name='Accueil'),
]
from django.views.generic.base import TemplateView
from Photographies.models import Photo


class AccueilTemplateView(TemplateView):

    template_name = "Accueil.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['photo'] = Photo.objects.all().order_by('-Date')[0]

        return context
from django.conf.urls import url, include
from django.urls import path
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static

from Accueil.views import AccueilTemplateView


urlpatterns = [
    path(r'', AccueilTemplateView.as_view(), name='accueil'),
    url(r'^admin/', admin.site.urls),
    url(r'^Accueil/', include('Accueil.urls')),
    url(r'^Materiel/', include('Materiel.urls')),
    url(r'^Photographies/', include('Photographies.urls')),
    url(r'^Articles/', include('Articles.urls')),
    url(r'^Meteo/', include('Meteo.urls')),
    url(r'^Presentation/', include('Presentation.urls')),
    url(r'^Contact/', include('Contact.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
最后,根据Accueil应用程序在我的URL.py文件中:

from django.conf.urls import url
from .views import AccueilTemplateView


urlpatterns = [
    url(r'^Accueil$', AccueilTemplateView.as_view(), name='Accueil'),
]

这里有很多错误,但我不明白为什么你会认为这是可行的。您的第一个模式根本不调用视图,所以如何将照片传递到该模板?@DanielRoseman如果我只是通过一些堆栈问题和网络课程/教程自学Django,那就很抱歉了。我将尝试更改我的第一个模式。@BugHunter我不确定,因为我只选择了最后一个。我认为这个问题,比如说@DanielRoseman,来自于我的url.py文件,这个问题确实与你的urlpattern有关。您正在对根路径使用TemplateView。即使它使用正确的模板,也不会传递任何模板上下文。因此,您无法在主页上看到任何图像详细信息。在您的修复中,您使用的是视图,并将其中的上下文传递给视图,因此在本例中图像渲染正确。顺便说一句,第二部电影不错:@neverwanner好的,谢谢你的解释!我理解我的错误,这就是为什么我找到了解决问题的方法。有些事情再次变得相当模糊,不清楚,因为学习编程本身并不容易;但让每一个都变得更好!了解每个人的问题。哦,谢谢你,你想要一个n°3吗P