簡體   English   中英

Python Django 文件字段 404

[英]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.pysettings.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通常是為用戶上傳的圖片保留的。 閱讀更多信息:

https://docs.djangoproject.com/en/3.1/ref/models/fields/

沒有真正遵循您的解決方案。 抱歉,如果我很厚。 文件引用是在自定義上下文標記中生成的。 它直接從文件字段中提取。 這不會導致 Finance1.png。 相反,它將引用 productimages/Finance1.png。

檢查您是否添加了 MEDIA_URL 和 MEDIA_ROOT。

並嘗試使用 product_obj.image.url 獲取圖像,我猜

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM