Django管理后台的文件上传管理和选择器
项目描述
Django管理后台的文件上传和管理选择器,支持从Flickr、YouTube、Vimeo等浏览和嵌入。
在上面的任何内容文本区域下方添加文件选择器,上传文件并查看上传的文件(带有缩略图)。点击文件将其添加到内容区域中的引用。
内联文件引用可以根据每类MIME类型进行自定义,以自动化每个文件的正确显示:图像的 <img> 标签(根据需要添加额外的标记)、可下载文件的链接,甚至音频或视频文件的嵌入播放器。请参阅演示视频。
安装
使用 easy_install 或 pip 从PyPI安装
pip install django-adminfiles
或获取开发版本
pip install http://bitbucket.org/carljm/django-adminfiles/get/tip.gz
依赖项
django-adminfiles 需要 Django 1.4 或更高版本,sorl-thumbnail 11.12(与旧3.x系列不兼容)以及 Python Imaging Library。
需要 djangoembed 或 django-oembed 才能使用OEmbed功能。浏览Flickr照片需要 flickrapi,观看YouTube视频需要 gdata。
用法
要在Django项目中使用django-adminfiles
将'adminfiles'添加到您的INSTALLED_APPS设置中。如果您尚未安装,请添加'sorl.thumbnail'。
运行python manage.py syncdb来创建adminfiles数据库表。
使adminfiles/static/adminfiles目录的内容在STATIC_URL/adminfiles下可用。这可以通过您的web服务器配置、通过例如django.contrib.staticfiles的应用程序,或者通过复制文件或创建符号链接来完成。
在您的根URLconf中添加url(r'^adminfiles/', include('adminfiles.urls'))。
从FilePickerAdmin继承内容模型管理选项。
此外,您可能还想将sorl-thumbnail的THUMBNAIL_EXTENSION设置更改为"png",而不是默认的"jpg",这样在adminfiles文件选择器中生成缩略图时,具有alpha透明度的图像就不会损坏。
FilePickerAdmin
对于您想要使用django-adminfiles选择器的每个模型,请从adminfiles.admin.FilePickerAdmin继承该模型的管理选项类,而不是通常的django.contrib.admin.ModelAdmin,并将adminfiles_fields属性设置为与内容字段一起使用的字段名列表/元组。
例如,如果您有一个具有content TextField的Post模型,并且您想要从django-adminfiles选择器中插入对该TextField的引用
from django.contrib import admin from adminfiles.admin import FilePickerAdmin from myapp.models import Post class PostAdmin(FilePickerAdmin): adminfiles_fields = ('content',) admin.site.register(Post, PostAdmin)
选择器显示所有上传图像的缩略图以及非图像文件的适当图标。它还允许您过滤并只查看图像或只查看非图像文件。在左下角,它包含上传新文件或刷新可用文件列表的链接。
如果您单击文件缩略图/图标,将弹出一个菜单,其中包含编辑或删除上传文件或将其插入相关内容字段的选项。要修改默认插入选项,请设置ADMINFILES_INSERT_LINKS设置。
文件引用
当您使用文件上传选择器将上传的文件引用插入文本内容字段时,它会插入类似<<<my-file-slug>>>的内容,它由ADMINFILES_REF_START和ADMINFILES_REF_END设置以及FileUpload实例的slug构建而成。
引用还可以包含文件slug之后的任意键值选项,由冒号分隔,例如:<<<my-file-slug:class=left>>>。
这些通用引用允许您使用django-adminfiles与原始HTML内容或任何类型的文本标记。它们还允许您更改上传的文件,并让旧的文件引用拾取更改(只要slug没有更改)。文件的URL路径或其他元数据,如图像的高度或宽度,都不会硬编码到您的内容中。
渲染引用
这些引用需要在某个时刻渲染成您最终想要的任何标记。渲染生成的标记由位于adminfiles/render/下的Django模板控制。
所使用的模板是根据文件上传引用的MIME类型选择的。例如,对于渲染MIME类型为image/jpeg的文件,所使用的模板将是以下存在的第一个模板:adminfiles/render/image/jpeg.html,adminfiles/render/image/default.html,adminfiles/render/default.html。
如果应该将文件渲染成具有不同的MIME类型(例如,您想要链接而不是显示的图像),请传递带有您想要渲染的MIME类型的as选项(其中子类型或整个MIME类型都可以替换为default)。例如,如果使用默认可用的模板,您想要链接到图像文件,则可以使用<<<my-image:as=default>>>。
django-adminfiles包含两个渲染模板:adminfiles/render/image/default.html(用于任何类型的图像)和adminfiles/render/default.html(用于任何其他类型的文件)。这些默认模板为图像生成HTML img 标签,并为其他文件类型生成简单的a链接。它们还尊重三个键值选项:class,它将用作img或a标签的class属性;alt,它是图像的alt文本(仅限图像;如果没有提供,则使用upload.title作为alt文本);以及title,它将覆盖upload.title作为a标签的链接文本(仅限非图像)。
您可以通过自己的模板轻松覆盖这些模板,并为其他文件类型提供额外的模板。模板将在以下上下文中渲染
- upload
与引用的slug字段匹配的FileUpload模型实例。此实例的有用属性包括upload.upload(一个Django File对象),upload.title,upload.description,upload.mime_type(分别作为upload.content_type和upload.sub_type单独访问)以及upload.is_image(如果upload.content_type是“image”则为True)。图像还有可用的upload.height和upload.width。
- options
参考中键值选项的字典。
如果遇到具有无效slug的引用(在数据库中找不到该slug的FileUpload),则渲染ADMINFILES_STRING_IF_NOT_FOUND设置的值(默认为空字符串)。
render_uploads模板过滤器
django-adminfiles提供两种使实际渲染发生的方法。简单方法是模板过滤器:render_uploads。要使用它,只需加载adminfiles_tags标签库,并将render_uploads过滤器应用于内容字段
{% load adminfiles_tags %} {{ post.content|render_uploads }}
render_uploads过滤器仅将内容中的任何文件上传引用替换为渲染的模板(如上所述)。
过滤器还接受一个可选参数:用于渲染每个上传文件引用的模板的备用基本路径。此路径将替换为基于MIME类型搜索特定模板时的基本路径adminfiles/render。这允许在不同情况下使用不同的渲染。
{{ post.content|render_uploads:"adminfiles/alt_render" }}
对于类型为 text/plain 的文件,将使用以下模板之一: adminfiles/alt_render/text/plain.html、adminfiles/alt_render/text/default.html 或 adminfiles/alt_render/default.html。
render_upload 模板过滤器
如果你在模板中有一个 FileUpload 模型实例,并希望使用正常渲染逻辑仅渲染该实例,可以使用 render_upload 过滤器。此过滤器接受与用于传递选项到内嵌文件的“key=val:key2=val2”格式相同的选项;特殊选项 template_path 指定了一个用于查找渲染模板的替代基本路径。
{{ my_upload|render_upload:"template_path=adminfiles/alt_render:class=special" }}
保存时的预渲染
在某些情况下,当模型保存时,内容字段中的标记会被预渲染并存储在数据库或缓存中。在这种情况下,最好也在该步骤中渲染上传的文件引用,而不是每次在模板中显示内容时都重新渲染。
要使用这种方法,首先需要将函数 adminfiles.utils.render_uploads 集成到现有的内容预渲染过程中,该过程应由保存内容模型自动触发。
adminfiles.utils.render_uploads 函数接受一个内容字符串作为其参数,并返回所有上传文件引用被替换的相同字符串,与模板标签相同。它还接受一个 template_path 参数,它与 render_uploads 模板过滤器 接受的参数相同。
将此函数集成到标记渲染步骤超出了 django-adminfiles 的范围。例如,如果使用 django-markitup 处理内容标记,则 MARKITUP_FILTER 设置可能如下所示
MARKITUP_FILTER = ("utils.markup_filter", {})
这指向 utils.py 中的一个函数,如下所示
from markdown import markdown from adminfiles.utils import render_uploads def markup_filter(markup): return markdown(render_uploads(markup))
完成此操作后,将 ADMINFILES_USE_SIGNALS 设置为 True。现在 django-adminfiles 将自动跟踪你内容模型中的所有上传文件引用。每次上传的文件发生变化时,所有引用该文件的内容模型将自动重新保存(并因此更新为新上传的文件)。
嵌入来自其他站点的媒体
django-adminfiles 允许从支持 OEmbed 协议的任何站点嵌入媒体。OEmbed 支持通过 djangoembed 或 django-oembed 提供,必须安装其中一个才能使嵌入工作。
如果安装了支持的 OEmbed 应用程序,则 render_uploads 模板过滤器也将自动将任何 OEmbed 兼容的 URL 替换为适当的嵌入标记(因此,任何由安装的 OEmbed 应用程序支持的站点的 URL 都可以简单地手动粘贴到内容中)。
此外,django-adminfiles 在其文件选择器中提供了视图来浏览 Flickr 照片、YouTube 视频和 Vimeo 视频并将其 URL 通过点击插入到上下文 textarea 中。要启用这些浏览视图,请设置 ADMINFILES_YOUTUBE_USER、ADMINFILES_VIMEO_USER、ADMINFILES_FLICKR_USER 和 ADMINFILES_FLICKR_API_KEY 设置(并确保满足 依赖项)。
要支持浏览来自其他站点的内容,只需创建一个继承自 adminfiles.views.OEmbedView 的类视图,并将它的点路径添加到 ADMINFILES_BROWSER_VIEWS 设置中。有关详细信息,请参阅 adminfiles/views.py 中现有的视图。
要列出可用的浏览视图及其状态(启用或禁用,以及原因),django-adminfiles 提供了一个 adminfiles_browser_views 管理命令,您可以使用 ./manage.py adminfiles_browser_views 来运行。
设置
ADMINFILES_REF_START
表示文本内容中上传文件引用开始的标记。默认为‘<<<’。
如果将其设置为不够独特的东西(可能在您的内容中 elsewhere 出现的字符串),则所有赌注都无效。
特殊正则表达式字符被转义,因此您可以安全地将其设置为类似‘[[[’的东西,但您不能用它进行高级正则表达式操作。
ADMINFILES_REF_END
表示文本内容中上传文件引用结束的标记。默认为‘>>>’。
如果将其设置为不够独特的东西(可能在您的内容中 elsewhere 出现的字符串),则所有赌注都无效。
特殊正则表达式字符被转义,因此您可以安全地将其设置为类似‘]]]’的东西,但您不能用它进行高级正则表达式操作。
ADMINFILES_USE_SIGNALS
一个布尔设置:是否应该 django-adminfiles 跟踪哪些内容模型引用哪些上传文件,并在引用的上传文件更改时重新保存这些内容模型?
如果已经在保存时间预先渲染了内容字段中的标记,并希望在相同的保存时间预先渲染步骤中渲染上传引用,请将此设置为 True。
默认为 False。如果您不理解此设置,可以安全地将它保留为 False,并使用 render_uploads 模板过滤器。
ADMINFILES_STRING_IF_NOT_FOUND
用于替换无效上传文件引用(给定 slug 未找到)的字符串。默认为 u''。
ADMINFILES_STDICON_SET
Django-adminfiles 随附了一些用于显示文件选择器中非图像文件的常见文件类型的图标。要启用更广泛的 mime-type 图标,请将此设置设置为在 stdicon.com 中包含的图标集的名称,并将链接到该集合的图标。
ADMINFILES_INSERT_LINKS
默认情况下,图像的 admin 文件选择器弹出菜单允许插入无选项的引用,带有“class=left”的引用,或带有“class=right”的引用。对于非图像,默认弹出菜单仅允许插入无选项的引用。要更改各种文件类型的插入选项,请将 ADMINFILES_INSERT_LINKS 设置为一个将 mime 类型(或部分 mime 类型)映射到插入菜单选项的字典。例如,默认设置如下所示
ADMINFILES_INSERT_LINKS = { '': [('Insert Link', {})], 'image': [('Insert', {}), ('Insert (left)', {'class': 'left'}), ('Insert (right)', {'class': 'right'})] }
字典中的每个键可以是 mime 类型的第一部分(例如,“image”),或完整的 mime 类型(例如,“audio/mpeg”),或空字符串(如果没有 mime 类型匹配时默认使用)。对于任何给定的文件,都使用最具体的匹配条目。该字典应始终包含一个默认条目(空字符串键),或者某些文件可能没有插入选项。
字典中的每个值是一个菜单项列表。每个菜单项是一个两元组,其中第一个条目是插入选项的用户可见名称,第二个条目是要添加到插入文件引用中的选项的字典。
ADMINFILES_UPLOAD_TO
将要传递给“django-admin-upload”的“FileUpload”模型中的“upload_to”参数;确定“django-adminfiles”在上传文件时相对于“MEDIA_URL”的位置。可以包含如Django文档中所述”strftime”格式化代码。默认设置为“'adminfiles'。”。
ADMINFILES_THUMB_ORDER
应用于文件选择器中显示的缩略图的排序顺序。期望是一个字段名称的元组,以“-”开头表示反向排序,与“ordering”模型Meta属性相同。默认值是('-upload_date');按上传日期排序的缩略图,最新的在前。
ADMINFILES_BROWSER_VIEWS
包含要提供给文件选择器的文件浏览视图的点分隔路径列表。默认设置包括“django-adminfiles”捆绑的所有视图。
['adminfiles.views.AllView', 'adminfiles.views.ImagesView', 'adminfiles.views.AudioView', 'adminfiles.views.FilesView', 'adminfiles.views.FlickrView', 'adminfiles.views.YouTubeView', 'adminfiles.views.VimeoView']
尽管包含在此设置中,但最后三个设置可能无法启用,如果它们的依赖关系未满足或未设置所需的设置。
ADMINFILES_YOUTUBE_USER
使用YouTube视频浏览器所必需。
ADMINFILES_VIMEO_USER
使用Vimeo视频浏览器所必需。
ADMINFILES_VIMEO_PAGES
每页Vimeo API返回20个视频;此设置确定要获取的最大页数(默认为1,Vimeo强制最大为3)。
ADMINFILES_FLICKR_USER
使用Flickr照片浏览器所必需。
ADMINFILES_FLICKR_API_KEY
使用Flickr照片浏览器所必需。
JQUERY_URL
“django-adminfiles”需要jQuery JavaScript库。默认情况下,“django-adminfiles”使用由Google托管的最新的jQuery 1.4版本,通过URLhttps://ajax.googleapis.ac.cn/ajax/libs/jquery/1.4/jquery.min.js。
如果您希望使用jQuery的不同版本,或者自己托管它,请设置“JQUERY_URL”设置。“JQUERY_URL”可以是绝对路径或相对路径;如果是相对路径,则是相对于“STATIC_URL”。例如
JQUERY_URL = 'jquery.min.js'
这将使用位于“STATIC_URL/jquery.min.js”的jQuery。CHANGES =======
1.0.1 (2013.06.15)
针对非本地文件存储的修复。感谢vitaly4uk。
修复MANIFEST.in,以确保静态资产包含在发布tarball中。感谢StillNewb的报告。
1.0 (2013.06.06)
向后不兼容:Django版本1.4之前的版本不再进行测试或支持。
向后不兼容:已移除“ADMINFILES_MEDIA_URL”设置,使用“STATIC_URL”在所有地方用于静态资产。感谢Rudolph Froger的建议。
更新到最新的sorl-thumbnail。感谢Svyatoslav Bulbakha。
添加了俄语翻译。感谢Svyatoslav Bulbakha。
添加了西班牙语翻译。感谢Andrés Reyes Monge。
更新到使用Django 1.3的基于类的视图。修复#10。感谢Andrés Reyes Monge和Ales Zabala Alava。
0.5.1 (2011.03.22)
添加了对djangoembed以及django-oembed的支持。
添加了对通过ADMINFILES_VIMEO_PAGES设置的多页Vimeo结果的支撑(默认为1)。
添加了德语翻译。感谢Jannis Leidel。
0.5.0 (2010.03.09)
添加了“as”模板覆盖关键字选项
添加了“render_upload”过滤器
添加了YouTube、Flickr、Vimeo浏览器
添加了OEmbed支持
添加了翻译钩子和波兰语翻译:感谢Ludwik Trammer!
添加了对从stdicon.com链接完整集合的mimeType图标的支持。
使JS引用插入选项可配置。
向后不兼容:默认渲染模板现在是 adminfiles/render/default.html 而不是 adminfiles/render.html。图像特定的渲染应覆盖 adminfiles/render/image/default.html 而不是在默认模板中测试 upload.is_image。
添加了按MIME类型模板渲染
升级到jQuery 1.4
修复了YouTube和Flickr链接即使被禁用也显示的bug。
添加了sync_upload_refs命令
0.3.4 (2009.12.03)
修复了render_uploads模板标签中过度的转义。
0.3.3 (2009.12.02)
修复了非图像文件的slug插入。
0.3.2 (2009.12.02)
修复了setup.py的package_data,以便媒体和模板从sdist安装。
0.3.1 (2009.11.25)
修复了setup.py,以便不安装tests包。
0.3.0 (2009.11.23)
作为django-adminfiles的初始版本发布
添加了文档和测试套件
添加了引用解析与渲染、模板过滤器、信号处理
待办事项
当在1.3上运行测试时,修复run_tests和短DB名称弃用警告。
测试和记录snipshot集成与选择下拉集成。
添加与plain FilePathField或FileField的集成(用于与第三方应用的无障碍使用)。
使JS中的URL可移植(通过反转“all”视图来找出我们已在URLconf中包含的位置)。
链接到在线演示或视频。
项目详情
django-adminfiles-1.0.1.tar.gz的哈希
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9effa56f20b2c280822f42f4ccd268453caf86aed6fa5457f0a026b37b7eb9b8 |
|
MD5 | db768791f5870ac867b6ee14bf89b899 |
|
BLAKE2b-256 | 06e6fb9c27c6688a63a8124c47f93640760e698e9ce1ea01e6f701ff717313c5 |