Django:对象未加载到HTML模板

时间:2018-06-07 14:46:05

标签: python django

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

环境:

  • Django 2.0.1
  • Python 3.5
  • MariaDB 10.1

问题:

当我可以访问我的Django主页时,它应该显示一个图像,根据我的观点,但我什么都没得到。只有当我去其他地方并且回到主页时才会得到我的照片。

我的代码:

我的models.py

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")

我的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 %}

最后是我的urls.py文件:

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

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

我的全局urls.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'),

因为网址只是:http://localhost:8000 如果我写http://localhost:8000/Accueil/Accueil,它是相同的模板(我的主页),但是我加载的图片。

1 个答案:

答案 0 :(得分:2)

我找到了解决方案:

我更改了views.py文件:

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

然后,在我的全局urls.py文件中:

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)

最后在我的urls.py文件中根据Accueil App:

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


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