[英]Python Django Filefield 404
遇到了一个超出我能力范围的有趣问题。 搜索了整个interwebz,但找不到任何合适的。 开始了。
问题:GET 图像文件返回 404。在这种特殊情况下,文件是使用模型文件字段上传的。 从模板进行的调用与文件的物理位置不同,这是一个 404。由于应用程序的动态模式,我很困惑如何解决这个问题。 总之,我需要一些帮助?!?!
Python Django 最新版本,好的开始。
项目:我的网站
应用程序:主要
模型:
class Product_images(models.Model):
product = models.ForeignKey(Products, on_delete=models.SET_NULL, blank=True, null=True)
image = models.FileField(upload_to='productimages/', null=True)
name = models.CharField(max_length=50,unique=False,blank=True)
class Meta:
verbose_name = 'Product Image'
verbose_name_plural = 'Product Images'
def __str__(self):
return '{} - {} - {}'.format(self.pk, self.product, self.name)
看法:
def products_view(request, *args, **kwargs):
return render(request, "products.html")
产品.html:
包括标签{{ product_section }}
上下文处理器.py:
这里有很多循环和编码,重要的是。
html_value += u'<img class="d-block w-100" onclick="openModal();currentSlide(1)" src="{}" width="400px" height="250x" alt="{}">'.format(productimages_obj.image,productimages_obj.name)
productimages_obj 是查询集
html 值在 products.html 模板中使用
网址.py:
urlpatterns = [
path('home/', views.home_view, name='home'),
path('products/someproduct', views.products_view, name='some product'),
]
结果:
http://127.0.0.1:8000/products/someproduct [12/Sep/2020 01:02:37]“GET /products/productimages/Finance1.png HTTP/1.1”404 3228
我明白为什么 get 失败了。 就像模型文件字段将图像存储在 main\\productimages 下一样。 我无法理解的是如何忽略 /product/ url 前缀。
想了解为什么 django 会这样。 为什么是前缀网址? 我应该如何构建我的应用程序来规避这个?
干杯。
这段代码:
image = models.FileField(upload_to='productimages/', null=True)
将文件上传到MEDIA_ROOT/productimages
。 因此,您要确保在settings.py
中settings.py
MEDIA_ROOT
:
MEDIA_ROOT = '/path/to/products/'
MEDIA_URL = '/products/'
然后,在urls.py
:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
如果您想在模板中使用{{ MEDIA_URL }}
,请在 TEMPLATES 的“context_processors”选项中添加“django.template.context_processors.media”。 例子:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.media',
],
},
},
]
MEDIA_xxx
通常是为用户上传的图片保留的。 阅读更多信息:
没有真正遵循您的解决方案。 抱歉,如果我很厚。 文件引用是在自定义上下文标记中生成的。 它直接从文件字段中提取。 这不会导致 Finance1.png。 相反,它将引用 productimages/Finance1.png。
检查您是否添加了 MEDIA_URL 和 MEDIA_ROOT。
并尝试使用 product_obj.image.url 获取图像,我猜
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.