在localhost(windows)上提供媒体服务

时间:2015-07-31 23:22:14

标签: django windows

我有一个img文件,我将其复制到/ mediafiles /文件夹。我该如何显示它?它只返回404(未找到)。或者在DEBUG模式下这是不可能的?

我也尝试在模板中使用{{ MEDIA_URL }}img1.jpg,但无济于事。 仅供参考,我对静态图像或样式表没有任何问题(只要我不忘记运行collectstatic)。

Django 1.8.3,Windows上的localhost,在virtualenv中。

非常感谢任何想法。

的myproject \ MYAPP \ settings.py:

STATIC_URL = '/staticfiles/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS= (
    os.path.join(BASE_DIR, 'static/myapp/theme_one'),
)
TEMPLATE_DIRS = (
    os.path.join(BASE_DIR, 'templates/myapp/theme_one'),
) 
MEDIA_URL = '/mediafiles/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'mediafiles')

的myproject \ MYAPP \ urls.py:

from django.conf.urls import patterns, include, url  
urlpatterns = patterns('',
    url(r'^book/', 'book.views.protopage', name='protopage'),
)

的myproject \书\ views.py:

def protopage(request):
    picurl = settings.MEDIA_URL + 'img1.jpg'

    return render_to_response('book/protopage.html', locals(), context_instance=RequestContext(request))

的myproject \书\模板\书\ protopage.html:

{% load static from staticfiles %}
<!DOCTYPE html>
<html lang="en">
<head><link href="{% static 'css/style.css'%}" rel="stylesheet"></head>
<body>
    <img src='{{ picurl }}'/>
</body>
</html>

文件结构

MYPROJECT
│   .gitignore
│   manage.py
├───book
│       views.py    
├───myapp
│       settings.py
│       urls.py
├───mediafiles
│       img1.jpg
├───static
│   └───myapp
│       └───theme_one
│           ├───css
│           │       style.css
│           └───img
│                   logo.png 
├───staticfiles
├───templates
│   └───myapp
│       └───theme_one
│           └───book
│               └───protopage.html
└───venv

1 个答案:

答案 0 :(得分:0)

我在阅读https://docs.djangoproject.com/en/1.8/ref/views/

之后开始工作了

在我的urls.py文件中,我需要添加static.serve()视图:

    from django.conf import settings    
    . . . 
    urlpatterns = patterns('',
        url(r'^book/', 'book.views.protopage', name='protopage'),
        (r'^mediafiles/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT 
        }),
    )