簡體   English   中英

手動檢查時即使文件存在也無法訪問媒體文件

[英]Not able to access media file even if file exists when checked manually

我有一個 Django 無法訪問的媒體文件,即使我在瀏覽器中輸入它的 URL 它肯定存在。

信息

  1. 語言:Python [v.3.9.7]
  2. 平台:Django [v.3.2.8]

目標

能夠訪問媒體文件

描述

問題是,人們可以在我的網站上上傳書籍。 人們上傳這些書的不同尺寸的圖像,所以我希望能夠處理所有這些,所以我訪問圖像的寬度和高度,然后將其用作視圖中圖像的大小(CSS)。 為此,我使用了一個自定義過濾器image_size ,它將完成訪問圖像和查找其大小的所有工作,並將其發送回視圖:

@register.filter
def image_size(img, host):
    img = host[0] + "://" + host[1] + img
    with Image.open(img) as image:
        width, height = image.size
        dct = {
            "width": width,
            "height": height
        }
        return dct

這里, host[0]是圖像的 URL 的協議( request.scheme ), host[1]是主機名( request.get_host() )。 這是我的看法:

def all_books(request):
    if request.user.is_authenticated:
        context = {
            "books": Book.objects.all(),
            "request": request,
            "user_profile": UserProfileInfo.objects.get(user=request.user),
            "mail_sent": False,
        }
    else:
        context = {
            "books": Book.objects.all(),
            "request": request,
            "mail_sent": False,
            "user_profile": False,
        }
    context["host"] = [request.scheme, request.get_host()]
    if request.GET.get("context") == "mail_sent":
        context["mail_sent"] = True
    return render(request, 'main/all_books.html', context)

settings.py static 和媒體配置

STATIC_URL = '/static/'
STATICFILES_DIRS = [STATIC_DIR,]
MEDIA_ROOT  = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'
LOGIN_URL = '/main/user_login/'

其中BASE_DIRPath(__file__).resolve().parent.parentPath是從pathlib導入的)

還沒有完成collectstatic ,因為由於某種原因它刪除了與 CSS 的連接,並且突然沒有呈現 CSS 。

我應該怎么做才能讓它工作?

上傳文件 go 到 MEDIA_ROOT 除非它在 model 字段中定義不同 您在過濾器中“手動”構建 img 文件的路徑......它不指向媒體/......

img = host[0] + "://" + host[1] + img

暫無
暫無

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

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