#django
#django
Вопрос:
Я новичок в Django. Мне нужна помощь. Я хочу отображать изображения. Здесь я сохранил путь к изображению в базу данных и изображения в папку. Пожалуйста, помогите мне отобразить эти изображения.
views.py:
def uploadfile(request):
print('inside upload logic')
if request.method == 'POST':
form = FileUploadForm(request.POST, request.FILES)
if form.is_valid():
# ImageUpload(request.FILES['File_Name'])
myfile = request.FILES['File_Name']
fs = FileSystemStorage()
filename = fs.save(myfile.name, myfile)
uploaded_file_url = fs.url(filename)
newdoc = FileUpload(File_Name=myfile.name, File_path=uploaded_file_url, Description=request.POST['Description'])
newdoc.save()
#return HttpResponse("File uploaded successfuly")
return render(request, 'Login/fileupload.html')
else:
form = FileUploadForm()
return render(request, 'Login/fileupload.html', {
'form': form
})
def dataretrive(request):
newdoc=FileUpload.objects.all()
return render(request,'Login/displayimage.html',{'FileUpload':FileUpload})
МОЯ модель:
class FileUpload(models.Model):
File_Name = models.CharField(max_length=255, blank=True)
File_path = models.FileField(upload_to='')
Description = models.CharField(max_length=255, blank=True)
Upload_Date = models.DateTimeField(auto_now_add=True)
Комментарии:
1. можете ли вы опубликовать свою модель здесь?
2. класс FileUpload (модели. Модель): Имя_фАйла = модели. CharField(max_length = 255, blank = True) File_path = модели. Поле файла (upload_to=») Описание = модели. CharField(max_length = 255, blank = True) Upload_Date = модели. DateTimeField(auto_now_add=True)
3. пожалуйста, обновите свой вопрос и добавьте туда эту модель
4. и где вы хотите отобразить эти изображения в шаблонах Django?
5. просто получите доступ к
url
свойству этогоFileField
подобногоFile_path.Url
, отправляете ли вы его вJSON
или используете в шаблонах напрямую
Ответ №1:
Добавьте это в свою модель:
class FileUpload(models.Model):
File_Name = models.CharField(max_length=255, blank=True)
File_path = models.FileField(upload_to='')
Description = models.CharField(max_length=255, blank=True)
Image = models.ImageField(upload_to=upload_location)
Upload_Date = models.DateTimeField(auto_now_add=True)
def upload_location(instance, filename):
filebase, extension = filename.split(".")
return "%s/%s" % (instance.id, filename)
В вас settings.py в файле обязательно укажите MEDIA_URL и MEDIA_ROOT:
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
Для доступа к MEDIA_URL в шаблоне вы должны добавить django.template.context_processors.media в ваши context_processeors внутри конфигурации ШАБЛОНОВ.
Добавьте это в свой шаблон:
{% if instance.image %}
<img src="{{ instance.image.url }}" class='img-responsive' />
{% endif %}
Комментарии:
1.
File_path
уже есть,FileField
зачем ему поле изображения,FileField
отлично работает и для изображений2. @Aarif вы правы, конечно, это не так, но это не считается лучшей практикой.