跳转到主要内容

将文件附加到Django模型

项目描述

Paperclip

将附件添加到Django模型,用于MapEntity

release-status master-status master-coverage

python-versions django-versions

安装

从pypi安装(使用pip)

pip install paperclip

从github安装

pip install -e git://github.com/makinacorpus/django-paperclip.git#egg=django-paperclip

升级

升级到0.4.0后,如果您想启用链接到YouTube/Soundcloud媒体,您必须向数据库添加一个额外的列

ALTER TABLE paperclip_attachment ADD COLUMN attachment_video VARCHAR(200) NOT NULL DEFAULT '';

基本用法

  • easy_thumbnailsembed_videopaperclip添加到INSTALLED_APPS

  • 包含URL

urlpatterns = [
    ...
    url(r'^paperclip/', include('paperclip.urls')),
    ...
]
  • 在模板中包含脚本

<script src="{% static "paperclip/bootstrap-confirm.js" %}" type="text/javascript"></script>
<script src="{% static "paperclip/spin.min.js" %}" type="text/javascript"></script>
<script src="{% static "paperclip/paperclip.js" %}" type="text/javascript"></script>

如果您使用bootstrap 3或bootstrap 4,请包含paperclip/bootstrap-3-confirm.jspaperclip/bootstrap-4-confirm.js,而不是paperclip/bootstrap-confirm.js

  • 在模板中包含列表和表单

{% include 'paperclip/attachment_list.html' with object=my_instance attachment_form_next=my_instance.get_detail_url %}
  • 在您的应用之一中添加paperclip模型

class FileType(paperclip.models.FileType):
    pass

class Attachment(paperclip.models.Attachment):
    pass
  • 配置

定义以下django设置

PAPERCLIP_ENABLE_VIDEO = False,
PAPERCLIP_FILETYPE_MODEL = 'myapp.FileType'
PAPERCLIP_LICENSE_MODEL = 'myapp.License'
PAPERCLIP_ATTACHMENT_MODEL = 'myapp.Attachment'
PAPERCLIP_ACTION_HISTORY_ENABLED = True
  • 创建迁移并迁移

TEMPLATES

三个模板已嵌入,可以轻松覆盖

  • paperclip/attachment_list.html:使用以下两个模板渲染显示附件文件的对象表格和上传表单

  • paperclip/_attachment_table.html:使用以下模板渲染显示附件文件的对象表格。您可以使用block extra_column_headerblock extra_column_data添加额外的列

  • paperclip/_attachment_form.html:使用以下模板渲染上传表单

TEMPLATETAGS

提供了两个模板标签

get_attachments_for

解析与给定对象关联的附件。您可以使用as参数指定在上下文中存储附件的变量名。默认上下文变量名是attachments。您可以使用only_type可选参数按指定文件类型过滤。

示例

{% get_attachments_for my_instance as "my_attachments" %}
{% get_attachments_for my_instance as "my_attachments" only_type my_filetype_instance %}

attachment_form

渲染一个“上传附件”表单。必需的obj参数表示您要关联文件的实例。可以提供带有form参数的表单。重要:上下文中期望有attachment_form_next变量。如果您想使用自定义表单类,您还可以在上下文中添加attachment_form_class变量

示例

{% with object=my_instance attachment_form_next=my_instance.get_detail_url %}
    {% attachment_form object %}
{% endwith %}

OR

# views.py
...
context['object'] = my_instance
context['attachment_form_next'] = my_instance.get_detail_url(=)
context['attachment_form_class'] = MyAttachmentForm
...

# template
{% attachment_form object %}

使用自定义表单

您可以通过以下步骤使用自定义django表单。顺便说一下,如果您想使用django-crispy-forms或django-floppyforms,这是一个推荐解决方案。

  • 编写您的自定义表单

from paperclip.forms import AttachmentForm

class MyAttachmentForm(AttachmentForm):
    ...

注意:为确保不破坏表单逻辑,我们建议从原生paperclip.forms.AttachmentForm继承。

  • 将您的表单类添加到主视图上下文的attachment_form_class变量中

context['attachment_form_class'] = MyAttachmentForm
  • 覆盖'add_attachment''update_attachment' URL以在参数中提供您的自定义表单类

from my_app.forms import MyAttachmentForm

urlpatterns = [
    path('paperclip/', include('paperclip.urls')),
    ...
    path('add-for/<str:app_label>/<str:model_name>/<int:pk>/',
        'paperclip.views.add_attachment',
        kwargs={'attachment_form': MyAttachmentForm},
        name="add_attachment"),

    path('update/<int:attachment_pk>/',
        'paperclip.views.update_attachment',
        kwargs={'attachment_form': MyAttachmentForm},
        name="update_attachment"),
    ...
]

注意:确保在包含paperclip URL之后编写这些URL。

清理

删除或更改附件不会从磁盘上删除旧的附件文件。您可以在必要时运行以下命令来定期清理过时的文件

./manage.py clean_attachments

作者

makinacom

许可证

  • LGPL

变更日志

2.7.2 (2023-02-21)

  • 修复在未添加标题和随机后缀的情况下更新旧附件(版本<2.7.0)时附件和文件之间的链接丢失的问题

2.7.1 (2023-02-17)

  • 修复在未添加随机后缀的情况下更新旧附件(版本<2.7.0)时附件和文件之间的链接丢失的问题

2.7.0 (2023-02-15)

  • 对上传的文件添加安全检查

  • 修复点击pypi徽章时链接到Pypi项目的链接(另一个pypi项目名为django-paperclip

  • 修复测试支持HTML文件中的拼写错误(尽管没有损坏)

2.6.1 (2022-07-07)

  • 更改设置名称:PAPERCLIP_MIN_ATTACHMENT_HEIGHTPAPERCLIP_MIN_ATTACHMENT_WIDTH > PAPERCLIP_MIN_IMAGE_UPLOAD_WIDTHPAPERCLIP_MIN_IMAGE_UPLOAD_HEIGHT

  • 仅当它是图像时修复图像的检查大小

2.6.0 (2022-07-06)

** 新功能 **

  • 添加最大尺寸图像表单PAPERCLIP_MAX_BYTES_SIZE_IMAGE

  • 添加最小高度图像表单PAPERCLIP_MIN_ATTACHMENT_HEIGHT

  • 添加最小宽度图像表单PAPERCLIP_MIN_ATTACHMENT_WIDTH

2.5.1 (2022-07-05)

  • 添加块模板

2.5.0 (2022-04-26)

** 新功能 **

  • 在附件上添加字段许可证

2.4.3 (2022-04-08)

  • 将法语列名替换为英语列名

2.4.2 (2022-03-29)

** 修复 **

  • 修复js初始化模式嵌入类型应为文件而不是YouTube

2.4.1 (2022-03-18)

** 修复 **

  • 修复表单启用_linkjavascript

2.4.0 (2022-01-10)

** 新功能 **

  • 支持Django 4.0

2.3.4 (2021-12-13)

新功能

  • 添加PAPERCLIP_RESIZE_ATTACHMENTS_ON_UPLOAD设置以在上传时启用附件缩放

  • 添加PAPERCLIP_MAX_ATTACHMENT_WIDTH和PAPERCLIP_MAX_ATTACHMENT_HEIGHT以配置附件缩放(默认为1280px)

2.3.3 (2021-09-03)

** 新功能 **

  • 在附件列表中显示自定义列

2.3.2 (2021-06-09)

  • 添加 bootstrap-4-confirm

2.3.1 (2021-06-03)

** 新功能 **

  • 支持 Django 3.2 和 Python 3.9

  • 取消对 Python 3.5 的支持

2.2.6 (2020-11-24)

** 新功能 **

  • 支持 Django 3.1

2.2.5 (2020-05-15)

** 新功能 **

  • 支持 Django 2.2 和 3.0

  • 取消对 Django 1.11、2.0、2.1 和 Python 2 的支持

  • 设置自动 is_image 数据库列

2.2.4 (2020-03-10)

** 修复 **

  • 根据需要显示附件文件、视频或链接小部件

2.2.3 (2019-12-31)

** 修复 **

  • 修复 Django 2 的要求

2.2.2 (2019-10-08)

** 修复 **

  • 默认情况下不设置作者为当前用户名

  • 修复模式预选择

2.2.1 (2019-01-07)

** 修复 **

  • 修复权限更改、删除和删除他人的问题

2.2.0 (2018-11-07)

** 新功能 **

  • 支持 Python3、Django 2.0 和 2.1

  • 取消对 Django 1.8、1.9 和 1.10 的支持

2.1.2 (2018-03-25)

** 新功能 **

  • 支持 Django 1.8 到 1.11

2.1.1 (2017-03-23)

** 修复 **

  • 修复所需发布的包含问题

2.1.0 (2017-03-23)

** 新功能 **

  • 从现在起,附件模型支持外部图片 URL

2.0.0 (2017-02-21)

** 破坏性更改 **

  • 提供一个抽象模型。用户需要定义自己的附件模型

1.0.0 (2017-01-14)

** 破坏性更改 **

  • 取消对 Django <= 1.7 的支持

  • 将 urls 中的参数 'module_name' 重命名为 'model_name'

** 新功能 **

  • 支持 Django 1.8

  • 添加初始迁移(注意!它取决于应用设置)

0.5.0 (2016-01-11)

** 新功能 **

  • 添加清理旧文件的命令

0.4.1 (2015-03-20)

** 修复 **

  • 修复上传文件修改

0.4.0 (2015-03-20)

** 新功能 **

  • 允许添加到 YouTube 或 Soundcloud 媒体的链接

0.3.0 (2015-03-18)

** 已移除(警告:向后不兼容) **

  • 完全移除 crispy_forms 和 floppy_forms 集成(您现在可以用自定义的一个来覆盖它)

** 新功能 **

  • 允许使用自定义表单

0.2.3 (2014-12-15)

  • 处理可交换的用户模型

  • 嵌入 spinner、bootstrap-confirm 和添加 bootstrap-3-confirm

  • 取消对 crispy_forms 的依赖

0.2.2 (2014-11-14)

  • 修复附件的权限检查

0.2.0 (2014-11-12)

  • 允许从请求中覆盖文件类型。

0.1.3 (2014-11-07)

  • 修复区域文件打包

0.1.2 (2014-11-07)

  • 修复作者和图例上传正则表达式缺失

0.1.1 (2014-11-03)

  • 修复包中缺失的 SVG 媒体

0.1.0 (2014-10-23)

  • 初始工作版本

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定选择哪个,请了解更多关于 安装软件包 的信息。

源分发

paperclip-2.7.2.tar.gz (70.9 kB 查看散列)

上传时间

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面