2016-11-20 101 views
0

我有一個模型,其中包含user_image字段。該字段的默認圖像值:Django 1.10不顯示圖像

user_image = models.ImageField(verbose_name='Аватар',blank=True, default=settings.STATIC_URL+'avatar.jpeg') 

後更新的Django 1.10此默認圖像模板沒有顯示,因爲鏈接包含錯誤的道路。例如,在我的情況下鏈接應該

'127.0.0.0:8000/static/avatar.jpeg' 

,而不是我有這樣

'127.0.0.0:8000/media/static/avatar.jpeg' 

Python的控制檯輸出

>>>u.userprofiletable_set.get().user_image 
<ImageFieldFile: /static/avatar.jpeg> 

>>> u.userprofiletable_set.get().user_image.url 
'/media/static/avatar.jpeg' 

>>> u.userprofiletable_set.get().user_image.path 
Traceback (most recent call last): 
    File "<input>", line 1, in <module> 
    File "/Users/korablevop/.virtualenvs/mynewenv/lib/python3.5/site-packages/django/db/models/fields/files.py", line 64, in _get_path 
    return self.storage.path(self.name) 
    File "/Users/korablevop/.virtualenvs/mynewenv/lib/python3.5/site-packages/django/core/files/storage.py", line 407, in path 
    return safe_join(self.location, name) 
    File "/Users/korablevop/.virtualenvs/mynewenv/lib/python3.5/site-packages/django/utils/_os.py", line 78, in safe_join 
    'component ({})'.format(final_path, base_path)) 
django.core.exceptions.SuspiciousFileOperation: The joined path (/static/avatar.jpeg) is located outside of the base path component (/Users/korablevop/PycharmProjects/sxodu/media) 
+0

請出示settings.py文件 –

+0

'STATIC_URL = '/靜態/' STATICFILES_DIRS =( os.path.join(BASE_DIR, '靜態'), '靜態', ) MEDIA_ROOT = OS .path.join(BASE_DIR,'media /') MEDIA_URL ='/ media /'' – Oleg

+0

我試圖模仿你的情況,但在我的情況下一切工作正常。我發現這個帖子有類似的問題,因爲你http://stackoverflow.com/questions/33625173/suspicious-file-operation-the-joined-path-is-located-outside-of-the-base-pa,希望它幫助您。 –

回答

0

user_image定義鏈接,您有以下幾點:

default=settings.STATIC_URL+'avatar.jpeg' 

這沒有任何意義。首先,STATIC_URL是一個URL,而不是文件系統路徑,在這裏您將其用作文件系統路徑。其次,不要混淆靜態和媒體文件。 user_image是媒體,不是靜態的。

Django創建鏈接127.0.0.0:8000/media/static/avatar.jpeg,因爲根據以上所述,您的user_image/static/avatar.jpeg。它與MEDIA_URL連接,所以它變成了/media//static/avatar.jpg。也許它通過刪除雙斜槓來標準化URL,但事實是,你完全錯了。

您可能會發現我的帖子,How Django static files work in production,有幫助。

+0

它在Django 1.9上工作,我無法理解Django版本之間有什麼區別 – Oleg

+0

我不認爲這兩個Django版本在這方面有什麼區別。它可能是別的東西,打破了它。事情是,沒關係,因爲你在做的是偶然工作。 –