Я работаю над проектом с использованием Django (1.10), в котором мне нужно загрузить некоторые изображения в шаблоны Django, но мне интересно, некоторые изображения загружаются, но некоторые не загружаются, даже если они существуют в папке static_root.
Обновление: У меня есть два каталога в директории моего проекта, assets
и static_cdn
, и у меня есть 2 продукта в данный момент, изображение для одного продукта отображается, но не для другогоодин, когда я использовал этот параметр как:
STATIC_ROOT = os.path.join(BASE_DIR, 'assets')
STATIC_URL = '/assets/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static_cdn'), ]
Файл изображения для первого продукта отображается правильно, но не изображение второго продукта.
Но: когда я использую этот параметр как: STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn')
STATIC_URL = '/assets/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'assets'), ]
Файл изображения для второго продукта отображается правильно, но не изображение первого продукта.Это действительно запутанная часть.
Вот мои модели:
class AddedFile(models.Model):
image_name = models.CharField(max_length=3000, blank=True, null=True)
file_name = models.CharField(max_length=3000, blank=True, null=True)
def __str__(self):
return str(self.id)
class Products(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
description = models.TextField(max_length=200, blank=True, null=True)
image = models.ForeignKey(AddedFile, on_delete=models.CASCADE, null=True)
category = models.ForeignKey(Categories, on_delete=models.CASCADE, null=True)
parent_product_id = models.IntegerField(null=True)
product_type = models.CharField(max_length=100, blank=True)
regular_price = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
sale_price = models.DecimalField(max_digits=10, decimal_places=2, blank=True, null=True)
quantity = models.IntegerField(default=0)
sku_no = models.CharField(max_length=100, blank=True, null=True)
variant = models.CharField(max_length=100, blank=True, null=True)
tax_able = models.BooleanField(default=False)
enable_flag = models.BooleanField(default=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return str(self.id)
Вот от views.py
:
def product_add(request):
user_type = ''
try:
user_type = request.session['user_type']
except Exception as e:
print(e)
if user_type == 'admin':
if request.method == "POST":
try:
cat_id = request.POST['cat_id']
description = request.POST['description']
img = request.POST['img']
name = request.POST['name']
product_type = request.POST['product_type']
tax_able = request.POST['tax_able']
if product_type == 'simple':
regular_price = request.POST['regular_price']
sale_price = request.POST['sale_price']
sku = request.POST['sku']
quantity = request.POST['quantity']
if img:
get_img = []
try:
directory_base = settings.STATIC_ROOT
image = img.split(";base64,")
extens = image[0]
ext = extens.split("/")
extension = ext[1]
base_image = image[1]
b_image = base64.decodestring(base_image)
time.sleep(0.5)
temp_name = str((time.time())).replace('.', '')
file_name = temp_name + '_product.' + extension
image_path = directory_base + '/product_image'
if os.path.isdir(image_path) is False:
os.makedirs(image_path)
file_path = image_path + "/" + file_name
print(file_path)
with open(file_path, 'wb') as f:
f.write(b_image)
get_img.append(file_path)
# Profile Pic Compression
pic = file_path
im = Image.open(pic)
# for icon on frontend
im = im.resize((int(math.floor(230)), int(math.floor(230))), Image.ANTIALIAS)
new_name = image_path + "/" + '230x230' + temp_name + "_product." + extension
try:
quality = 90
im.save(new_name, optimize=True, quality=quality)
except Exception as e:
ImageFile.MAXBLOCK = width * height
im.save(new_name, optimize=True, quality=quality)
# for thumbnais
im = im.resize((int(math.floor(50)), int(math.floor(50))), Image.ANTIALIAS)
new_name = image_path + "/" + '50x50' + temp_name + "_product." + extension
try:
quality = 90
im.save(new_name, optimize=True, quality=quality)
except Exception as e:
ImageFile.MAXBLOCK = width * height
im.save(new_name, optimize=True, quality=quality)
img_name = temp_name + "_product." + extension
addedfile_obj = AddedFile(image_name=str(img_name))
addedfile_obj.save()
if tax_able:
obj = Products(name=name, description=description, image_id=addedfile_obj.id,
category_id=cat_id, product_type=product_type,
regular_price=regular_price, sale_price=sale_price, quantity=quantity,
sku_no=sku, tax_able=True)
obj.save()
else:
obj = Products(name=name, description=description, image_id=addedfile_obj.id,
category_id=cat_id, product_type=product_type,
regular_price=regular_price, sale_price=sale_price, quantity=quantity,
sku_no=sku)
obj.save()
return HttpResponse(json.dumps({'success': 'Saved Successfully'}))
except Exception as e:
pass
return HttpResponse(json.dumps({'error': 'Some error occur'}))
return HttpResponse(json.dumps({'error': 'Somethng went wrong'}))
except Exception as e:
print(e)
И, вот как я загружаю шаблон:
def all_product(request):
user_type = user_id = ''
try:
user_type = request.session['user_type']
user_id = request.session['user_id']
except Exception as e:
pass
if user_type == 'admin':
all_products = ''
try:
all_products = Products.objects.filter(parent_product_id__isnull=True)
# all_products=Products.objects.filter(product_type='simple');
except Exception as e:
pass
return render(request, "all_products.html", {'all_products': all_products})
И, вот настройки:
STATIC_URL = '/static_cdn/'
STATICFILES_DIRS = (
'static',
)
STATIC_ROOT = "static_cdn"
MEDIA_URL = "/media/"
MEDIA_ROOT = "media_cdn/"
EMAIL_URL = "137.27.76.49/dashboard/"
ENCODE_KEY = 'This_is_my_awsome_secret_key'
GROCERY_ITEMS_PER_PAGE = 10
# DATA_UPLOAD_MAX_MEMORY_SIZE = 52428800
SESSION_SAVE_EVERY_REQUEST = False
И, вот шаблоны, куда я загружаю эти изображения:
{% for product in all_products %}
<div class="col-sm-6 col-md-4 col-xs-6">
<div class="product_grid text-center">
<a class="" href="{% url 'single_page' id=product.id %}">
<div class="pro_grid_img d_table">
<div class="d_table_cell">
<img src="{% static 'product_image/' %}{{product.image.image_name}}" alt="No image">
</div>
</div>
</a>
</div>
</div>
{% endfor %}
Вот URL-адрес для просмотра страницы, на которой загружаются некоторые изображения, но не загружаются другие: http://c2f886fa.ngrok.io/grocery_order
Все изображения загружены в папку sttaic_cdn/product_image
.
Что тут может быть не так?
Заранее спасибо!