Row*_*ram 7 python django django-admin filefield
在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,在我看来就像一个bug.我只是错了吗?
添加行:
import os
BASE_DIR = os.path.realpath(os.path.dirname(__file__))
Run Code Online (Sandbox Code Playgroud)
替换线:
MEDIA_ROOT = ''
MEDIA_URL = ''
Run Code Online (Sandbox Code Playgroud)
同
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,os.pardir,'media')
Run Code Online (Sandbox Code Playgroud)
这应该设置你的项目从文件夹/你的项目目录/媒体/渲染你的媒体内容
还添加了一行:
import settings
Run Code Online (Sandbox Code Playgroud)
在您的网址模式中添加以下行:
url(r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT, 'show_indexes': False}),
Run Code Online (Sandbox Code Playgroud)
在您的模型中添加以下行:
File = models.FileField('File',upload_to='./')
Run Code Online (Sandbox Code Playgroud)
在模型中定义方法
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"
Run Code Online (Sandbox Code Playgroud)
使用该字段fileLink作为只读字段,您也可以将其添加到您的list_display
例如
class FileAdmin(admin.ModelAdmin):
list_display = ['fileLink']
readonly_fields = ['fileLink']
Run Code Online (Sandbox Code Playgroud)
这个问题的答案已经被这个答案相当彻底地涵盖了。但简而言之,问题在于您可能尚未在 settings.py 中设置 MEDIA_ROOT 和 MEDIA,并且在 urls.py 中尚未设置以便提供媒体文件夹。
有关如何执行这些操作的详细信息,请查看Akseli Palen的令人难以置信的精彩答案。
| 归档时间: |
|
| 查看次数: |
3823 次 |
| 最近记录: |