Python Django文件字段404

Python Django文件字段404,python,django,Python,Django,在我能力范围之外有一个有趣的问题。搜索了整个interwebz,但没有找到任何合适的。我们开始吧 问题是: GET image文件返回404。在这种特殊情况下,使用模型文件字段上载文件。从模板发出的调用与文件的物理位置不同,文件的物理位置是404。由于应用程序的动态模式,我不知道如何处理这个问题。总之,我需要帮助 PythonDjango最新版本,良好的开端 项目:MySite App:Main 型号: class Product_images(models.Model): produc

在我能力范围之外有一个有趣的问题。搜索了整个interwebz,但没有找到任何合适的。我们开始吧

问题是: GET image文件返回404。在这种特殊情况下,使用模型文件字段上载文件。从模板发出的调用与文件的物理位置不同,文件的物理位置是404。由于应用程序的动态模式,我不知道如何处理这个问题。总之,我需要帮助

PythonDjango最新版本,良好的开端

项目:MySite

App:Main

型号:

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)
视图:

products.html:

包括标记{{product_section}}

context_processors.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)
结果:

[12/Sep/2020 01:02:37]“GET/products/productimages/Finance1.png HTTP/1.1”4043228

我理解get失败的原因。正如模型文件字段在main\productimages下存储图像一样简单。我无法理解的是如何忽略/product/url前缀

想了解django为什么会这样做。为什么使用前缀url?我应该如何构建我的应用程序来规避这个问题

干杯。

此代码:

image = models.FileField(upload_to='productimages/', null=True)
将文件上载到
MEDIA\u ROOT/productimages
。因此,您需要确保在
settings.py
中设置了
MEDIA\u ROOT

MEDIA_ROOT = '/path/to/products/'
MEDIA_URL  = '/products/'
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)
然后,在
url.py
中:

MEDIA_ROOT = '/path/to/products/'
MEDIA_URL  = '/products/'
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\u URL}}
,请在模板的“context\u processors”选项中添加“django.template.context\u processors.MEDIA”。例如:

TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [],
    'APP_DIRS': True,
    'OPTIONS': {
        'context_processors': [
            'django.template.context_processors.media',
        ],
    },
},
]
MEDIA\u xxx
通常为用户上传的图像保留。更多信息请访问:


没有真正遵循您的解决方案。如果我太厚了,我道歉。文件引用是在自定义上下文标记中生成的。它直接从文件字段中提取。这不会导致Finance1.png。相反,它将引用productimages/Finance1.png。

检查您是否添加了媒体URL和媒体根目录


还可以尝试使用product_obj.image.url获取图像,我想

似乎无法提供所需的结果。已为主应用程序设置媒体根目录和媒体URL。我不确定为什么filefield输出包含对产品的引用?基于上述模型,该文件已成功上载到Main/productimages.MEDIA_ROOT=os.path.join(BASE_DIR,'Main/')MEDIA_URL='/Main/这是结果[12/Sep/2020 19:14:49]“GET/products/productimages/Finance1.png HTTP/1.1”4043400因此,您将
MEDIA_xxx
设置为“/Main/”,但我们仍然在关注
/products/productimages/
?那些肯定是我知道的。我不知道这些/产品来自哪里?我只是使用一个查询输出(productimages\u obj.image)。可以看到已在Main/productimages下创建的文件。