OK. Здесь происходит несколько вещей.
models.py и forms.p y в порядке.
Представления .py должен выглядеть следующим образом. Я закомментировал ваш код и добавил одну строку. По сути, я думаю, что здесь происходит не то, что вы создаете экземпляр 'загрузки' и сохранения модели, это только сохраняет поле 'Комментарии' и не обрабатывает файл. Выполнение метода .save () для объекта формы решает эту проблему.
def imagetest(request):
form=upl()
if request.method=='POST':
form = upl(request.POST, request.FILES)
if form.is_valid():
form.save()
# Comments = form.cleaned_data['Comments']
# img = form.cleaned_data['img']
# p=upload(Comments=Comments,img=img)
# p.save()
return render(request,'home.html',{'form':form,'up':upload.objects.all(), })
Теперь перейдем к отображению изображений. Во-первых, вам нужно будет изменить настройки для распознавания файлов мультимедиа. Измените файл settings.py , чтобы определить значения для местоположения файла мультимедиа и презентации.
Добавьте эти строки внизу.
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')
Конечно, вы можете выбрать любое место для этих файлов. См. Эту ссылку для дополнительной информации о MEDIA_URL и MEDIA_ ROOT
. Для views.py необходимо внести 2 изменения.
Добавить enctype = "multipart / form-data" для оператора формы. Это необходимо для того, чтобы объект File был отправлен вместе с POST.
Замените {{i.img}} на {{i.img.url}}. При добавлении метода .url выдается правильный относительный URL для изображение (простыми словами, предварительно добавляет значение Media Root.
<form enctype="multipart/form-data" method="POST">
{% csrf_token %}
{{form.as_p}}
<br>
<BUTTON TYPE ="SUBMIT">Submit</BUTTON><br>
<br>
</form>
{%for i in up %}
{{i.Comments}}
<img src ="{{i.img.url}}", alt="">
{%endfor%}
Предполагая, что вы запускаете его с использованием внутреннего сервера разработки, вам необходимо внести следующие изменения в ваши URL-адреса .py .
Добавьте эти записи в начало файла.
from django.conf import settings
from django.conf.urls.static import static
Добавьте шаблон, чтобы сервер мог найти файлы изображений. ... + stati c (settings.MEDIA_URL, document_root = settings.MEDIA_ ROOT)
urlpatterns = [
path('', views.home, name="home"),
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Надеюсь, это поможет. Рад сделать продолжение в случае необходимости.