【问题标题】:Admin FileField current url incorrectAdmin FileField 当前 url 不正确
【发布时间】:2013-09-09 01:34:54
【问题描述】:

在 Django 管理员中,无论我有 FileField,编辑页面上都有一个“当前”框,其中包含指向当前文件的超链接。但是,此链接附加到当前页面 url,因此会导致 404,因为没有这样的页面,例如: http://127.0.0.1:8000/admin/Tank/asset/17/media/datasheet/13/09/05/copyright.html/
作为参考,文件的正确 url 是: http://127.0.0.1:8000/media/datasheet/13/09/05/copyright.html

有没有办法在默认的管理布局中解决这个问题?它影响我数据库中的每个 FileField,在我看来就像一个错误。是我用错了吗?

【问题讨论】:

    标签: python django django-admin filefield


    【解决方案1】:

    settings.py

    添加行:

    import os
    BASE_DIR = os.path.realpath(os.path.dirname(__file__))
    

    替换行:

    MEDIA_ROOT = ''
    MEDIA_URL = ''
    

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

    这应该设置您的项目以从文件夹/您的项目目录/媒体/呈现您的媒体内容

    urls.py

    同时添加一行:

    import settings
    

    在您的 url 模式中添加以下行:

    url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),
    

    models.py

    在您的模型中添加以下行:

    File = models.FileField('File',upload_to='./')
    

    在模型中定义方法

    def fileLink(self):
        if self.File:
            return '<a href="' + str(self.File.url) + '">' + 'NameOfFileGoesHere' + '</a>'
        else:
            return '<a href="''"></a>'
    fileLink.allow_tags = True
    fileLink.short_description = "File Link"
    

    admin.py

    使用字段fileLink作为只读字段,您也可以将其添加到您的list_display

    例如

    class FileAdmin(admin.ModelAdmin):
        list_display = ['fileLink']
        readonly_fields = ['fileLink']
    

    【讨论】:

    • 已经有一段时间了,但是,您知道为什么我会得到 HTML 一个元素而不是链接,而是作为字符串显示在表单中而不是实际链接中? (在 Django 2.x 中)
    【解决方案2】:

    this answer 相当彻底地涵盖了这个问题的答案。然而,简而言之,问题是您可能没有在 settings.py 和 urls.py 中设置 MEDIA_ROOT 和 MEDIA,因此您还没有设置好媒体文件夹。

    有关如何做这些事情的详细信息,请查看Akseli Palen 的令人难以置信的精彩回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-29
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多