Admin FileField current url incorrect

后端 未结 2 1103
孤城傲影
孤城傲影 2021-02-09 08:15

In the Django admin, wherever I have a FileField, there is a \"currently\" box on the edit page, with a hyperlink to the current file. However, this link is appended to the curr

相关标签:
2条回答
  • 2021-02-09 08:16

    settings.py

    add the lines:

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

    replace the lines:

    MEDIA_ROOT = ''
    MEDIA_URL = ''
    

    with

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

    this should setup your project to render your media content from the folder /your project directory/media/

    urls.py

    also add the line:

    import settings
    

    add the following line in your url patterns:

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

    models.py

    inside your model add the following line:

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

    define the method in the model

    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

    use the field fileLink as a read only field, you can also add it to your list_display

    eg

    class FileAdmin(admin.ModelAdmin):
        list_display = ['fileLink']
        readonly_fields = ['fileLink']
    
    0 讨论(0)
  • 2021-02-09 08:22

    The answer to this question is fairly thoroughly covered by this answer. In brief however, the problem is that you probably haven't set up your MEDIA_ROOT and MEDIA in settings.py and in urls.py you haven't made it so that the media folder is being served.

    For the details of how to do those things check out the incredibly awesome answer by Akseli Palen.

    0 讨论(0)
提交回复
热议问题