$('.fixed-form-magnet form').on('submit', function(e){
e.preventDefault();
...
success...
document.location.href = 'put_your_url_here';
...
Hint: checkValidity() на поля формы на всяк случай)))
def get_path_upload_image(instance, filename):
"""
Переопределение имени и путя фотографии, сокращение названия
В следующий формат: (media)/photos/username/2019-08-20/photo-name_23-59-59.extension
"""
if '/' in filename:
filename = filename.split('/')[-1]
img_header, img_extension = os.path.splitext(filename)
if len(img_header) > 30:
if img_header[-6:] == '_thumb':
img_header = img_header[:30] + '_thumb'
else:
img_header = img_header[:30]
time = timezone.now().strftime('%Y-%m-%d')
img_name = img_header + '_' + time + img_extension
path = os.path.join('photos', '{}', '{}', '{}').format(instance.user.username, time, img_name)
return path
class Photo(models.Model):
""" Фото """
user = models.ForeignKey(User, verbose_name='Пользователь', on_delete=models.CASCADE)
name = models.CharField('Имя', max_length=50)
image = models.ImageField('Фото', upload_to=get_path_upload_image, blank=True, null=True)
thumbnail = models.ImageField('Превью', upload_to=get_path_upload_image, editable=False, blank=True, null=True)
order = models.PositiveSmallIntegerField('Порядковый номер', null=True, blank=True)
is_main = models.BooleanField('Главное', default=False)
created = models.DateTimeField('Дата создания', auto_now_add=True)
slug = models.SlugField('url', max_length=50, unique=True)
def __str__(self):
return self.name
class Meta:
verbose_name = 'Изображение'
verbose_name_plural = 'Изображения'
def save(self, *args, **kwargs):
self.make_thumbnail()
super(Photo, self).save(*args, **kwargs)
def make_thumbnail(self):
image = Image.open(self.image)
image.thumbnail((120, 80), Image.ANTIALIAS) # ваш размер thumbnail
thumb_name, thumb_extension = os.path.splitext(self.image.name)
thumb_filename = thumb_name + '_thumb' + thumb_extension
temp_thumb = BytesIO()
image.save(temp_thumb, 'JPEG')
temp_thumb.seek(0)
self.thumbnail.save(thumb_filename, ContentFile(temp_thumb.read()), save=False)
temp_thumb.close()
ph = Photo(user=profile.user, order=request.POST.get('files_uploaded'))
im = Image.open(photo_upload_form.cleaned_data['image'])
im = im.convert('RGB')
blob = BytesIO()
if im.width > 1920 or im.height > 1080:
output_size = (1920, 1080)
im.thumbnail(output_size)
im.save(blob, 'JPEG', quality=100)
ph_name = 'gallery{}-{}.jpg'.format(gal.id, timezone.now().strftime('%Y-%m-%d-%H-%M-%S'))
ph.name = ph_name
ph.slug = slugify(ph_name)
ph.image.save(ph_name, File(blob), save=False)
ph.save()
var files_uploaded = 0;
$("#add-image").on("change", function(e) {
var files = e.target.files,
filesLength = files.length;
for (var i = 0; i < filesLength; i++) {
var f = files[i];
var fileReader = new FileReader();
fileReader.onload = (function(e) {
var file = e.target;
var upl = $('#all-images .upload-image').parent(); //col с загрузчиком (все объекты в col обернуты)
upl.css('display', 'none');
files_uploaded += 1;
var new_img = '<div class="col-12 col-md-6 col-lg-4 mb-3" style="height: 150px; display: none"><div class="uploaded-img"><span class="image-number customized customized-border-color">' + files_uploaded + '</span><i class="fas fa-times remove-image customized-color-h"></i><img src="' + file.result + '"/></div></div>';
upl.before(new_img); //вставить перед загрузчиком
$('#all-images .upload-image span').text(files_uploaded+1); //меняем циферку
upl.prev().fadeIn(); //для красоты
upl.fadeIn();
});
fileReader.readAsDataURL(f);
}
});
...
<thead class="bg text-white font-weight-bold">
<tr class="d-none">
<th></th>
<th></th>
<th></th>
<th class="d-none d-md-table-cell"></th>
<th></th>
<th></th>
</tr>
<tr>
<th colspan="3">Объявление</th>
<th class="d-none d-md-table-cell" data-toggle="tooltip" data-placement="top" title="Сортировать">Дата</th>
<th data-toggle="tooltip" data-placement="top" title="Сортировать">Статус</th>
<th data-toggle="tooltip" data-placement="top" title="Сортировать">Цена</th>
</tr>
</thead>
...
columnDefs: [
{ orderable: false, targets: [ 0, 1, 2 ] }
]
var price = {{price}};
var usd_to_eur = {{coeff.usd_to_eur}};
var usd_to_btc = {{coeff.usd_to_btc}};
$('#eur_btn').on('click', function () {
var new_price = price * usd_to_eur;
$('#price').text(new_price);
});
...
$('#eur_btn').on('click', function () {
$.ajax({
url : "/valutes/eur/",
type : "post",
data : $('#hidden-input-form').serialize()
});
});
...
for i in range(your_range):
if (your_if):
continue
#your actions
import math
your_data = [] # твой большой массив
new_data = [] # результирующий массив
paginate_by = 500 # по сколько в 1 массивчике
iters = math.ceil(len(your_data)/paginate_by) # Округление вверх 2.3 --> 3
for i in range(iters):
paginated_data = your_data[(paginate_by*i):(paginate_by*(i+1))] # срез массива, допустим i = 2, то элементы с индексом от 1000 до 1499 (включительно)
new_data.append(paginated_data)
import math
def grouper(values, n, fillvalue=None):
return [values[n*i:n*(i+1)] for i in range(math.ceil(len(values)/n))]
data = ['1']*10
x = 3
print(grouper(data, x))
# Вывод: [['1', '1', '1'], ['1', '1', '1'], ['1', '1', '1'], ['1']]
# Или print(grouper(['1']*10, 3))
<div class="slider-name" style="width: 100%; height: 800px">
<!-- cover - растянуть изображение, сохраняя пропорции, но с обрезанием -->
<div style="width: 100%; height: 100%; background-image: url(path/to/image1.jpg); background-size: cover">
Данные первого слайда
</div>
<div style="width: 100%; height: 100%; background-image: url(path/to/image2.jpg); background-size: cover">
Данные второго слайда
</div>
<div style="width: 100%; height: 100%; background-image: url(path/to/image3.jpg); background-size: cover">
Данные третьего слайда
</div>
</div>