我已经设置了一个使用图片的 Django 应用程序。我想我已正确设置媒体设置MEDIA_ROOT和MEDIA_URL。但是图像没有显示出来。你知道这可能是什么问题吗?

让我们考虑这个例子:

图片文件位于 / home / www / media / app / photos 下,我们正在尝试请求 http://example.com/photos/123.jpg

我应该使用这些设置吗?

MEDIA\_ROOT = /home/www/media

MEDIA_URL = http://example.com/app

更新:忘记提及我正在使用内置开发服务器。

有帮助吗?

解决方案

从开发人员自己气馁来向Django提供静态内容(如果我没有错,它只在调试模式下有效)。您应该使用专用的Web服务器。

如果你真的需要这样做,无论如何,请阅读如何阅读文档提供静态文件

其他提示

仅供开发

您可以在 urls.py 文件中设置静态媒体服务器,以便与其开发服务器一起使用。我附上了显示我如何使用它的代码(以及强制DEBUG条件。)

from django.conf import settings
from django.conf.urls.defaults import *      

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('', 
    (r'^

我将 MEDIA_ROOT 放在html / media的子目录中,并在 settings.py

中链接到它
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')

开发完成后,项目将部署到Web服务器,然后由 Apache提供静态媒体文件使用指令。

, 'views.index'), # Accounts (r'^accounts/login/

我将 MEDIA_ROOT 放在html / media的子目录中,并在 settings.py

中链接到它 <*>

开发完成后,项目将部署到Web服务器,然后由 Apache提供静态媒体文件使用指令。

, 'views.user_login'), (r'^accounts/logout/

我将 MEDIA_ROOT 放在html / media的子目录中,并在 settings.py

中链接到它 <*>

开发完成后,项目将部署到Web服务器,然后由 Apache提供静态媒体文件使用指令。

, 'views.user_logout'), # Contrib Modules (r'^admin/(.*)', admin.site.root), ) if settings.DEBUG : urlpatterns += patterns('', (r'^media/(?P<path>.*)

我将 MEDIA_ROOT 放在html / media的子目录中,并在 settings.py

中链接到它 <*>

开发完成后,项目将部署到Web服务器,然后由 Apache提供静态媒体文件使用指令。

, 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}), )

我将 MEDIA_ROOT 放在html / media的子目录中,并在 settings.py

中链接到它 <*>

开发完成后,项目将部署到Web服务器,然后由 Apache提供静态媒体文件使用指令。

这是使用ImageField显示图像文件的正确方法。想象一下,我们有一个用户个人资料图片:

models.py:

UserProfile:
    profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)

settings.py:

MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'

urls.py:

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

PATH_TO_UPLOAD是用户上传数据的路径。这是FULL_PATH_OF_MEDIA的子目录,这意味着上传的文件将具有

FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD 

完整路径。现在可以通过此网址访问此内容:

SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD

我还建议您在 static_files vs media_files上阅读此内容

doc

我怀疑你正在获取Django 404页面。尝试直接访问您的某个图片,看看是否正在发生这种情况。

如果是这样,您需要将您的Web服务器配置为而不是在您的媒体层次结构中向Django发送请求,而是直接为它们提供服务。这是我的Apache conf文件中的一个剪辑。第一部分告诉Apache将所有内容发送到Django。第二部分具有“SetHandler None”。其中说“以正常方式处理/媒体下的内容。”

请参阅 http://docs.djangoproject.com/en/dev所有令人兴奋的细节都是/ howto / deployment / modpython /

PrinceOfPinot.com的部分httpd.conf文件(AKA pop):

<Location "/">
    SetHandler python-program
    PythonAutoReload Off
    PythonDebug Off
    PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonHandler django.core.handlers.modpython
</Location>

<Location "/media">
    SetHandler None
    AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>

我知道最初的问题是开发服务器,但对于正在寻找生产环境答案的其他人来说:

https://docs.djangoproject.com/en/1.8 / howto / static-files / deployment / 提供了有关如何在生产环境中使用django提供文件的指南。从指南的基调来看,它似乎暗示最好有一个单独的Web服务器来处理文件或使用mod_wsgi与Apache

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top