python - 媒体文件上的 404 - Django

标签 python django django-settings

昨晚我将我的项目上传到 pythonanywhere.com,我想在那里测试我的生产设置。在我的一个模型中,我允许用户上传 JPG(团队标志)。上传过程运行良好,文件位于我的 MEDIA_ROOT 中。问题是,当我尝试在我的模板中访问它(在页面上显示它)时,我得到了 404。我的第一个想法是我的 MEDIA_URL 配置不正确,但我仍然不知道为什么。我想说我的媒体文件夹不在项目中 - 它在外面。 在 development 模式下,我看到了 Logo (我正确设置了 if settings.DEBUG: urlpattern += static(...) 选项)。

我正在使用 Django 1.9.7 和 python 2.7 这是我的代码:

我的模型:

class Team(models.Model):

name = models.CharField(verbose_name='Name of the team', max_length=24)
logo = models.ImageField(upload_to='team_logos', verbose_name='Logo', blank=True, null=True)
def get_logo(self):
    u"""Get path to logo, if there is no logo then show default."""
    if self.logo:
        return self.logo.url
    return '/static/img/default_team_logo.jpg'

我的设置.py:

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media", "soccerV1", "static")
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "media", "static"),
)
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), "media", "soccerV1", "media")

还有我要求 Logo 的模板:

<td><img src="{{ details.get_logo }}" alt="{{ details.name }} logo" height="64px" width="64px"></td>

最佳答案

您需要在 PythonAnywhere 的仪表板中设置媒体文件映射。来自他们的 documentation :

  • 转到 PythonAnywhere 仪表板上的 Web 选项卡
  • 转到静态文件部分
  • url 部分输入与 MEDIA_URL 相同的 URL(在您的情况下为 /media/)
  • 路径部分输入从MEDIA_ROOT开始的路径(完整路径,包括/home/username/etc)

然后点击重新加载,您上传的文件应该会被正确提供。

关于python - 媒体文件上的 404 - Django,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38683105/

相关文章:

python - 将函数应用于所有月份 xarray python

python - 如何禁止选择 Tkinter Listbox 小部件的自由部分作为项目?

python - Django 多对多(通过),带有三个表和额外属性

带有分页的 Django 排序表

django - 如何获取 AutoField 的计数器值?

python - 在 PyCuda : doesn't work 中获取设备属性(warp_size 等)

python - Django 应用程序在本地运行,但我在 Heroku 上的 CSRF 验证失败

python - 在settings.py 中运行collectstatic 时出现语法错误(Django 1.5.1)

python - django local_settings导入错误

python - Django - 模板上下文处理器 - 破坏我的应用程序