2016-05-12 109 views
0

我一直在开发自己的Django的网站和所遇到的问题,Django的 - 图片上传保存到正确的位置,但无法显示

我有一个模型:

class Text_Image_Page(TrainingModulePage): 
      page_num = models.IntegerField(default = 0) 
      title = models.CharField(max_length=200) 
      text = models.CharField(max_length=200) 
      image_desc = models.CharField(max_length=200) 
      image = models.ImageField(upload_to=settings.MEDIA_ROOT, default = 'null') 
      training_module = models.ForeignKey(TrainingModule, related_name='text_image_pages', null=True) 
      def __str__(self): 
       return "Image Page" 

我使用modelForm来创建这个模型,并且一切正常,直到我尝试在模板中显示模型。

我的媒体的根在我的settings.py是

STATIC_URL = '/static/' 
MEDIA_URL = '/superchem_media/' 
STATIC_ROOT = '/home/anthonycalab/webapps/superchem_static/' 
MEDIA_ROOT = '/home/anthonycalab/webapps/superchem_media/' 

的图像是否被正确上传到媒体的根,因为我可以看到他们通过FileZilla的但是当我去我的模板,以显示我的形象存在:

<img src={{t.image.url}} alt="{{t.image_desc}}" style="width:304px;height:228px;"> 

如果我加载图像直接的联系,但不显示图像,futhermore我得到一个404错误,消息如下:

Request Method: GET 
Request URL:    http://anthonycalab.webfactional.com/home/anthonycalab/webapps/superchem_media/41WKTB25KsL._SY395__mNsiAbb.jpg 
Using the URLconf defined in superchem.urls, Django tried these URL patterns, in this order: 
^training_modules/ 
^admin/ 
^accounts/ 
^superchem\_media\/(?P<path>.*)$ 
^static\/(?P<path>.*)$ 
The current URL,  home/anthonycalab/webapps/superchem_media/41WKTB25KsL._SY395__mNsiAbb.jpg,  didn't match any of these. 

任何想法是我可以做的不正确?

编辑:

的问题已被缩小到:

{{t.image.url}} = /home/anthonycalab/webapps/superchem_media/41WKTB25KsL._SY395__mNsiAbb.jpg

当我想

/media/[imagelink].jpg

+0

你能显示你的url设置吗?看起来像你不设置媒体网址http://stackoverflow.com/questions/5517950/django-media-url-and-media-root – AlmasK89

+0

'urlpatterns + =静态(settings.MEDIA_URL,document_root = settings.MEDIA_ROOT) urlpatterns的+ = staticfiles_urlpatterns(settings.STATIC_URL)' 的问题是: image.url是给我: /home/anthonycalab/webapps/superchem_media/image.jpg 代替: media/image.jpg –

回答

0

添加媒体的URL在主urls.py文件

from django.contrib import admin 
from django.conf.urls import patterns, include, url 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from django.conf import settings 


admin.autodiscover() 


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

] 

urlpatterns += patterns('', 
         url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': False}), 
         url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': False}), 
         ) 
urlpatterns += staticfiles_urlpatterns() 
+0

这仍然给我同样的问题。 {{img.url}} = /home/anthonycalab/webapps/superchem_media/img.jpg 它应该只是给我/media/img.jpg –

+0

有没有办法只返回图像名称? 例如image1.jpg –

+0

您是否在您的设置中添加了此代码。 TEMPLATE_CONTEXT_PROCESSORS =( '-------------------' 'django.core.context_processors.media', 'django.core.context_processors。静态', '-----------' ) – 2016-05-12 10:19:41

0
settings.py 

import os 

def root(x): 
    return os.path.join(os.path.abspath(os.path.dirname(__file__)), '..',x) 

MEDIA_ROOT = root('media') 
MEDIA_URL = '/media/' 
STATIC_ROOT = root('staticstorage') 
STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    root('static'), 
) 


TEMPLATE_CONTEXT_PROCESSORS = (
    '-------------------' 
    'django.core.context_processors.media', 
    'django.core.context_processors.static', 
    '-----------' 
) 

urls.py 

from django.conf.urls import patterns, include, url 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from django.conf import settings 

urlpatterns += patterns('', 
         url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT, 'show_indexes': False}), 
         url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': False}), 
         ) 
urlpatterns += staticfiles_urlpatterns()