我用django部署了一个网站。它服务于所有静态文件,但不提供用户上传的文件。
这是我的settings.py
和urls.py
:
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG = False
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticroot')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
MEDIA_URL = '/files/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploaded_files')
和urls.py
:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', Index.as_view(), name='index'),
]
在页面中,它正确打印用户上传的文件地址,但是当我点击链接时它不显示anf,它显示我404页面。 我使用了从nginx存储库中获取的nginx的最新版本。版本1.12。 它与django或webserver(nginx + gunicorn)有关吗?我该如何解决这个问题?
更新
当我将MEDIA_URL
和DEBUG
更改为True时,它首次运行并提供用户上传的文件,但如果我刷新页面,那么它就不起作用了!问题是什么?
答案 0 :(得分:0)
您必须在 urls.py
中定义from django.conf.urls import include, url
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', Index.as_view(), name='index'),
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
答案 1 :(得分:0)
这是因为生产中的django不提供静态和媒体文件。这就是为什么当你使DEBUG = True时它可以工作,
您需要做的是在您的服务器块的nginx配置中为媒体文件设置别名,就像静态文件一样:
location /files/ {
autoindex on;
alias /home/your/project/uploaded_files/;
}
另外,不要忘记之后重新启动你的nginx。