【问题标题】:User cannot upload to Media directory on Pythonanywhere用户无法上传到 Pythonanywhere 上的媒体目录
【发布时间】:2017-07-19 09:27:17
【问题描述】:

我想提交一个有文件字段的表单,在开发模式下我可以成功提交,但是当涉及到 pythonanywhere 时,我被重定向到我的自定义失败页面,这意味着表单没有通过。

当没有附件时,表单被保存,它在developpement(username.pythonanywhere.com)上调试true & false,但在产品(www.domain.com)上无效

这是我配置 pythonanywhere 文件的方式:

settings.py:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
DEBUG = False

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

urls.py

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

models.py

class AskTicket(models.Model):
    document = models.FileField(upload_to='attachments')
    ...

这是我设置静态文件管理器的方法:

为什么用户不能下载文件?我错过了什么吗?

【问题讨论】:

  • PythonAnywhere dev here -- 您的错误日志中是否有任何错误? (在静态文件表上方有一个指向它的链接。)

标签: python django pythonanywhere


【解决方案1】:

关注DjangoGirls Tutorial怎么样?

你可以在https://tutorial.djangogirls.org/en/deploy/找到它

所以你必须这样做:

import os
import sys

path = '/home/<your-PythonAnywhere-username>/my-first-blog'  # use your own PythonAnywhere username here

if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

from django.core.wsgi import get_wsgi_application
from django.contrib.staticfiles.handlers import StaticFilesHandler
application = StaticFilesHandler(get_wsgi_application())

【讨论】:

  • 你不是忘了收集静态文件吗?
  • 你会删除 FileField 中的 'upload_to' 参数吗?
  • 哦,所以您可以通过管理员上传,而不是使用您的自定义表单?
  • 嗯,你会从 PA 的静态文件设置中删除 /static/admin/ 吗?如果你做了collectstatic,那么它可能会被复制。 (我知道这种方法是可行的,但让我们逐步检查。)
猜你喜欢
  • 1970-01-01
  • 2017-09-29
  • 2015-10-04
  • 2023-02-11
  • 2021-11-03
  • 2011-02-27
  • 2012-09-04
  • 2019-07-04
  • 2019-07-01
相关资源
最近更新 更多