2017-08-16 74 views
2

對於我正在建設的網站(第一個網站從頭btw如此新的django)我想提供給管理員一種手段從管理頁面部署圖像,這將用於驅動器從客戶的角度來看業務邏輯。不過,我希望管理員能夠從管理頁面查看這些圖像。 所以我想要從應用程序視圖和管理視圖訪問一個公共圖像文件夾。我目前只有一個名爲retailFilters的應用程序。從django管理局提供的圖像文件

現在實際上將一些文件部署到我的media/images文件夾不是問題,我在管理頁面上添加了一條記錄(指定要上傳的圖像),當然,這些文件正在等待我期望的位置。我也意識到我必須告訴Django在那裏爲他們服務的,並從各地的互聯網,我有我MEDIA_ROOT戳,MEDIA_URL和URL模式定義爲:

settings.py

... 
parent_dir = os.path.abspath(os.path.dirname(__file__) + '/..') 
MEDIA_ROOT = os.path.join(parent_dir, 'media/') 
MEDIA_URL = 'media/' 

(和INSTALLED_APPS包括Django的.contrib.staticfiles))

urls.py

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
] 

urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT) 

然而,爲了點擊他們的迴應是,管理員撈出的橫幅錯誤:

「Filter with ID」1/change/media/images/2012-03-29「.27.05.jpg」不存在。可能已被刪除「


我的Python版本是2.7.10

我的Django的版本是1.11

此刻我的目錄結構(根是項目目錄)如下:?

. 
├── db.sqlite3 
├── manage.py 
├── media 
│   └── images 
│    └── 2012-03-29_22.27.05.jpg 
├── NOTES 
├── retailFilters 
│   ├── admin.py 
│   ├── admin.pyc 
│   ├── apps.py 
│   ├── fixtures 
│   │   └── boltons.json 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── migrations 
│   │   ├── 0001_initial.py 
│   │   ├── 0001_initial.pyc 
│   │   ├── 0002_auto_20170816_1934.py 
│   │   ├── 0002_auto_20170816_1934.pyc 
│   │   ├── __init__.py 
│   │   └── __init__.pyc 
│   ├── models.py 
│   ├── models.pyc 
│   ├── tables 
│   │   ├── Bolt_On_Group.py 
│   │   ├── Bolt_On_Group.pyc 
│   │   ├── Bolt_On.py 
│   │   ├── Bolt_On.pyc 
│   │   ├── Filter.py 
│   │   ├── Filter.pyc 
│   │   ├── __init__.py 
│   │   ├── __init__.pyc 
│   │   ├── Order_Payment.py 
│   │   ├── Order_Payment.pyc 
│   │   ├── Order.py 
│   │   ├── Order.pyc 
│   │   ├── Payment_Vendor.py 
│   │   ├── Payment_Vendor.pyc 
│   │   ├── User.py 
│   │   └── User.pyc 
│   ├── tests.py 
│   └── views.py 
├── snapify 
│   ├── __init__.py 
│   ├── __init__.pyc 
│   ├── settings.py 
│   ├── settings.pyc 
│   ├── urls.py 
│   ├── urls.pyc 
│   ├── wsgi.py 
│   └── wsgi.pyc 
└── static 
    └── retailFilters 
     └── media 
      └── images 

我admin.py有:

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.contrib import admin 

from django.contrib.auth.models import User 
from django.contrib.auth.models import Group 

from tables.Filter import Filter 

admin.site.unregister(User) 
admin.site.unregister(Group) 

<...other un-related admin entries ...>  

@admin.register(Filter) 
class FILTER_Admin(admin.ModelAdmin) : 
    fields = ('DESCRIPTION', 'FILENAME', 'CATEGORY', 'PRICE') 

    #list_display = ('show_image',) 

和我的濾鏡模式也是:

Filter.py

# -*- coding: utf-8 -*- 
from __future__ import unicode_literals 

from django.db import models 
from django.core.exceptions import ValidationError 
from django.core.files.storage import FileSystemStorage 

import os 
import pdb 

categories = {'T': 'Personalised Template', 
       'C': 'Custom Filter'} 
images = 'images' 

class Filter(models.Model) : 
    FILTER_REFERENCE = models.IntegerField(primary_key = True) 
    FILENAME   = models.ImageField(upload_to = images) 
    DESCRIPTION  = models.TextField() 
    CATEGORY   = models.CharField(max_length = 1, null = True, choices = [(x, categories[x]) for x in categories]) 
    PRICE    = models.DecimalField(default = 0.00, max_digits = 5, decimal_places = 2) 

    def __unicode__(self) : 
     return self.DESCRIPTION 

    #def show_image(self) : 
    # #pdb.set_trace() 
    # return '<a href="{0}"><img src="{0}"></a>'.format(self.FILENAME) 

    #show_image.allow_tags = True 

和的runserver命令行的最後輸出:

System check identified no issues (0 silenced). 
August 16, 2017 - 20:03:42 
Django version 1.11.1, using settings 'snapify.settings' 
Starting development server at http://127.0.0.1:8000/ 
Quit the server with CONTROL-C. 
[16/Aug/2017 20:03:44] "GET /admin/ HTTP/1.1" 200 4683 
[16/Aug/2017 20:03:47] "GET /admin/retailFilters/filter/ HTTP/1.1" 200 4203 
[16/Aug/2017 20:03:47] "GET /admin/jsi18n/ HTTP/1.1" 200 3217 
[16/Aug/2017 20:03:55] "POST /admin/retailFilters/filter/ HTTP/1.1" 200 3175 
[16/Aug/2017 20:03:57] "POST /admin/retailFilters/filter/ HTTP/1.1" 302 0 
[16/Aug/2017 20:03:57] "GET /admin/retailFilters/filter/ HTTP/1.1" 200 3189 
[16/Aug/2017 20:03:58] "GET /admin/jsi18n/ HTTP/1.1" 200 3217 
[16/Aug/2017 20:04:04] "GET /admin/retailFilters/filter/ HTTP/1.1" 200 3067 
[16/Aug/2017 20:04:06] "GET /admin/retailFilters/ HTTP/1.1" 200 3167 
[16/Aug/2017 20:04:08] "GET /admin/retailFilters/filter/add/ HTTP/1.1" 200 5420 
[16/Aug/2017 20:04:08] "GET /admin/jsi18n/ HTTP/1.1" 200 3217 
[16/Aug/2017 20:04:20] "POST /admin/retailFilters/filter/add/ HTTP/1.1" 302 0 
[16/Aug/2017 20:04:20] "GET /admin/retailFilters/filter/ HTTP/1.1" 200 4391 
[16/Aug/2017 20:04:20] "GET /admin/jsi18n/ HTTP/1.1" 200 3217 
[16/Aug/2017 20:04:23] "GET /admin/retailFilters/filter/1/change/ HTTP/1.1" 200 5789 
[16/Aug/2017 20:04:23] "GET /admin/jsi18n/ HTTP/1.1" 200 3217 
[16/Aug/2017 20:04:25] "GET /admin/retailFilters/filter/1/change/media/images/2012-03-29_22.27.05.jpg/ HTTP/1.1" 302 0 
[16/Aug/2017 20:04:25] "GET /admin/retailFilters/filter/1/change/media/images/2012-03-29_22.27.05.jpg/change/ HTTP/1.1" 302 0 
[16/Aug/2017 20:04:25] "GET /admin/ HTTP/1.1" 200 5427 
[16/Aug/2017 20:04:29] "GET /admin/retailFilters/filter/1/change/ HTTP/1.1" 200 5789 

抱歉,如果這已經被問了無數次,但我在這個問題上花費了堅實的5個小時在互聯網上搜索並且仍然不成功。

任何人都可以指出我錯過了什麼嗎?

回答

3

你只需要改變settings.py:

MEDIA_ROOT = os.path.join(parent_dir, 'media/') 
MEDIA_URL = '/media/' 
#------------^ 
+0

非常感謝你爲察覺那......那工作! – HexedAgain