Загрузить изображение и показать его на шаблоне - Django 2.0 - PullRequest
0 голосов
/ 20 мая 2018

У меня есть этот код на моем шаблоне:

{% extends "base.html" %}
{% block content %}
<div style="padding:40px;margin:40px;border:1px solid #ccc">
    <h1>picture</h1>
    <form action="" method="post" enctype="multipart/form-data"> <!--{% url 'imageupload' %}-->
        {% csrf_token %} {{form}} 
        <input type="submit" value="Upload" />
    </form>
{% for img in images %}
    {{forloop.counter}}.<a href="{{ img.pic.url }}">{{ img.pic.name }}</a>
    ({{img.upload_date}})<hr />
{% endfor %}
</div>
{% endblock content %}

Хотя у меня есть сомнения с form action, но в любом случае.

Проблема заключается в том, что когда я нажимаю кнопку submit, он выводит меня на пустую страницу, нет всплывающего окна для фактической загрузки изображения, ничего.

Есть ли какой-то пример, которому я должен следовать, чтобы выполнить это?

Кроме того, это всего лишьпробный тест, но я хотел бы знать, действительно ли модель и / или форма необходимы для его работы?

РЕДАКТИРОВАТЬ

Хорошо, отредактировав input строка как эта <input type="file" name='input_name' /> она фактически открывает всплывающее окно файла, но, очевидно, она ничего не загружает, ей нужна кнопка submit или что-то в этом роде, так что теперь это выглядит так:

{% extends "base.html" %}
{% block content %}
<div style="padding:40px;margin:40px;border:1px solid #ccc">
    <h1>picture</h1>
    <form action="" method="post" enctype="multipart/form-data"> <!--{% url 'imageupload' %} -->
        {% csrf_token %} {{form}} 
        <input type="file" name='input_name' />
        <input type="submit" value="Upload" />
    </form>
{% for img in images %}
    {{forloop.counter}}.<a href="{{ img.pic.url }}">{{ img.pic.name }}</a>
    ({{img.upload_date}})<hr />
{% endfor %}

{% endblock content%}

Но когда я нажимаю на кнопку отправить, он продолжает отправлять меня на пустую страницу, поэтому значение для отправки, равное Upload, исходит из этой модели:

from django.db import models
from django.forms import ModelForm

class Upload(models.Model):
    pic = models.FileField(upload_to="static/")    
    upload_date=models.DateTimeField(auto_now_add =True)

class UploadForm(ModelForm):
    class Meta:
        model = Upload
        fields = ('pic',)

И по моим views.py:

from django.shortcuts import render
from uploader.models import UploadForm,Upload
from django.http import HttpResponseRedirect
from django.urls import reverse

def home(request):
    if request.method=="POST":
        img = UploadForm(request.POST, request.FILES)       
        if img.is_valid():
            img.save()  
            return HttpResponseRedirect(reverse('imageupload'))
    else:
        img=UploadForm()
    images=Upload.objects.all()
    return render(request,'image_upload.html',{'form':img,'images':images})

И по моим urls.py:

from django.conf import settings
from django.conf.urls import include, url
from django.conf.urls.static import static
from django.contrib import admin
from django.views.generic import TemplateView
from django.views import defaults as default_views
from uploader import views as uploader_views

urlpatterns = [...
    some patterns...
    url(r'^image_upload/', uploader_views.home, name='imageupload'),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...