Ostatnio próbowałem przejść tutorial dotyczący dodawania zdjęć do bazy danych w Django: Link do tutoriala, jednak gdy wszystko przepisałem (gdy już nie działało dla pewności wszystko skopiowałem), wyświetlił mi się następujący komunikat na stronie:
Exception Type: AttributeError
Exception Value: 'NoneType' object has no attribute 'imagefile'
Exception Location: C:\project\app\views.py in showimage, line 246
Wyjątek został rzucony w tym miejscu:
C:\project\app\views.py in showimage, line 246:
imagefile= lastimage.imagefile
Cały kod wygląda tak:
settings.py:
#...
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'django.template.context_processors.media',
],
},
},
]
#...
STATIC_URL = '/static/'
MEDIA_ROOT= os.path.join(BASE_DIR, 'media/')
MEDIA_URL= "/media/"
urls.py:
from django.contrib import admin
from django.urls import include, path
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('strike/', include('app.urls')),
path('admin/' , admin.site.urls),
] + static(settings.MEDIA_URL, document_root= settings.MEDIA_ROOT)
app\models.py:
from django.db import models
class Image(models.Model):
name= models.CharField(max_length=500)
imagefile= models.FileField(upload_to='images/', null=True, verbose_name="")
def __str__(self):
return self.name + ": " + str(self.imagefile)
app\forms.py:
from django import forms
from .models import Image
class ImageForm(forms.ModelForm):
class Meta:
model= Image
fields= ["name", "imagefile"]
app\views.py:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, reverse
from django.utils import timezone
from .models import Image
from .forms import *
#...
def showimage(request):
lastimage= Image.objects.last()
imagefile= lastimage.imagefile # tu rzuca wyjątek
form= ImageForm(request.POST, request.FILES)
if form.is_valid():
form.save()
context= {'imagefile': imagefile,
'form': form
}
return render(request, 'students/images.html', context)
images.html:
<html>
<head>
<meta charset="UTF-8">
<title>Upload Images</title>
</head>
<body>
<h1>Image Uploader</h1>
<form enctype="multipart/form-data" method="POST" action="">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Upload"/>
</form>
<br><br>
<img src='{{ MEDIA_URL }}{{ imagefile }}'>
<br><br>
</p>
</body>
<script>'undefined'=== typeof _trfq || (window._trfq = []);'undefined'=== typeof _trfd && (window._trfd=[]),_trfd.push({'tccl.baseHost':'secureserver.net'}),_trfd.push({'ap':'cpsh'},{'server':'p3plcpnl0769'}) // Monitoring performance to make your website faster. If you want to opt-out, please contact web hosting support.</script><script src='https://img1.wsimg.com/tcc/tcc_l.combined.1.0.6.min.js'></script>
</html>
- W czym jest błąd i jak go naprawić?
- Najważniejsze: Czy ktoś może wytłumaczyć krok po kroku, jak powinno się dodawać zdjęcia do bazy danych django, używając formularza (w sensie, że wytłumaczyć cały proces dodawania zdjęć do bazy danych, chodzi o wytłumaczenie, a nie o same linki)?
- Poza tym z jakich stron warto skorzystać, aby dowiedzieć się więcej o dodawaniu plików do baz danych w Django
- Co robi skrypt wklejony na dole images.html.
Jestem początkujący w Django, więc proszę o wyrozumiałość.