【问题标题】:Cannot open saved File in Django Admin无法在 Django Admin 中打开保存的文件
【发布时间】:2012-10-02 06:26:24
【问题描述】:

我可以通过 Django 管理员在我的一个模型中成功保存文件,但之后无法打开该文件。这是我的模型:

class Answer (models.Model):
    answer = models.CharField(max_length=1000)
    attach_file = models.FileField(upload_to='Attachments', blank=True)

我没有触及设置文件,据我了解,它应该使用默认值:

MEDIA_ROOT = ''
MEDIA_URL = ''
STATIC_ROOT = ''

我在 admin.py 中注册了模型,并且能够浏览文件并保存它。尝试打开该文件时,我得到:

Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/businessui/answer/1/Attachments/outlook.png/
answer object with primary key u'1/Attachments/outlook.png' does not exist.

有人能指出我在这里缺少什么,以便能够在我的开发机器上本地打开保存的文件吗?

【问题讨论】:

    标签: django file http-status-code-404 admin


    【解决方案1】:

    尝试像这样设置你的 settings.py:

    import os
    PROJECT_ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir))
    
    MEDIA_ROOT = os.path.join(PROJECT_ROOT_PATH, 'media/')
    MEDIA_URL = '/media/'
    

    所以,试着把你的文件放进去:

    http://127.0.0.1:8000/media/Attachments/outlook.png
    

    【讨论】:

    • 更进一步,似乎我在 urls.py 文件中缺少与媒体相关的 conf:“使用 MyProject.urls 中定义的 URLconf,Django 按以下顺序尝试了这些 URL 模式:... “当前的 URL,media/Attachments/outlook.png,与其中任何一个都不匹配。”目前我的 urls.py 中没有任何 r'^media/' 或类似的行。
    【解决方案2】:

    参考@Sawwy 对@RicardoCarmo 回答的评论。我发布作为格式的答案。

    这是我在主 url conf 中使用的内容:

    if getattr(settings, 'DEBUG', False) or getattr(settings, 'DEBUG_MEDIA', False):
        media_url = getattr(settings, 'MEDIA_URL', '/media/').lstrip('/')
        urlpatterns = patterns('',
            url(r'^%s(?P<path>.*)$' % (media_url,), 'django.views.static.serve', {
                'document_root': settings.MEDIA_ROOT
            }),
        ) + urlpatterns
    

    请注意,在生产环境中,您的媒体文件应由 Web 服务器提供,并且这些请求不应到达 Django。这就是为什么它符合if DEBUG or DEBUG_MEDIA

    【讨论】:

    • 感谢@RicardoCarmo 和@dokkaebi!两个答复都包含解决方案所需的信息。不幸的是,我无法将它们都标记为答案......我知道我需要正确地找出生产端环境,但我目前正在进行第一次迭代,只是想让它在我的本地机器上工作。另外,作为 python/django 新手,我正在通过您的代码示例了解为什么管理文件现在可以正常工作:)
    猜你喜欢
    • 2020-10-10
    • 1970-01-01
    • 2015-04-27
    • 2015-07-16
    • 2017-03-27
    • 2023-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多