404关于媒体文件-Django



昨晚我将我的项目上传到pythonnywhere.com,我想在那里测试我的生产设置。在我的一个模型中,我允许用户上传JPG(团队标志)。上传过程运行良好,文件位于我的MEDIA_ROOT中。问题是,当我试图在我的模板中访问它(在页面上显示它)时,我会得到404。我的第一个想法是我的MEDIA_URL配置不正确,但我仍然不知道为什么。我想说的是,我的媒体文件夹不在项目中,它在外面。在开发模式下,我看到徽标(我有if设置。DEBUG:urlpatter+=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")

和我的模板,我呼吁标志:

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

您需要在PythonAnywhere的面板中设置媒体文件映射。从他们的文件:

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

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

最新更新