跳转到主要内容

为Django模型添加属性。

项目描述

pypi coverage python django djangocms djangocms4

此项目是对JSONField的特定实现,用于任意HTML元素属性。

该功能旨在提供一种合理的方式,用于存储和管理任意HTML元素属性,以便以后将它们输出到模板中。

属性类型繁多,使用“常规”的Django方法为业务模型中的每个属性添加ModelField,最多是繁琐的,而且可能需要相关表来支持任何数量的同类型属性(即data-attributes)。这可能会导致性能问题。

为了避免这些陷阱,此包允许将这些属性作为JSON blob存储在数据库中的单个文本字段中,但提供了一个很好的小部件,提供直观的键/值对界面,并对使用的键进行合理的验证。

preview.gif

为此项目做出贡献并赢得奖励

由于这是一个开源项目,我们欢迎每个人参与项目因贡献而获得奖励。成为这个优秀社区的一员,帮助我们使django CMS成为世界上最优秀的CMS。

我们非常乐意收到您以问题和拉取请求形式提供的反馈。在提交您的拉取请求之前,请查阅我们的贡献指南

我们对所有帮助创建和维护此包的贡献者表示感谢。贡献者名单在贡献者部分列出。

文档

有关其他依赖项,请参阅setup.py文件中的REQUIREMENTS

安装

对于手动安装

  • 运行pip install djangocms-attributes-field

  • djangocms_attributes_field添加到您的INSTALLED_APPS

  • 运行python manage.py migrate djangocms_attributes_field

配置

AttributeField

在您的Models.model中使用此字段

# models.py
...
from django.db import models
from djangocms_attributes_field.fields import AttributesField
...
MyCoolModel(models.Model):
    ...
    attributes = AttributesField()

就是这样!

在声明字段时可以使用可选参数

``excluded_keys`` : This is a list of strings that will not be accepted as
                    valid keys
属性: [field_name]_str

AttributeField还将提供一个方便的属性[field_name]_str,它将输出存储的键/值对作为字符串,适用于包含在目标HTML元素的模板中。您可以使用它如下

# models.py
...
MyCoolModel(models.Model):
    ...
    html_attributes = AttributesField()


# templates/my_cool_project/template.html
...
<a href="..." {{ object.html_attributes_str }}>click me</a>
...

(假设object是一个包含MyCoolModel实例的上下文变量。)

除了将键/值对转换为具有适当转义和标记安全的字符串的繁琐任务封装起来之外,这个属性还确保了在excluded_keys中已添加键的现有键/值对也不会包含在输出字符串中。

AttributeWidget

AttributesWidget默认情况下已由AttributesField使用,但在某些情况下,您可能希望覆盖其使用。

该小部件支持两个额外的参数

``key_attrs`` : A dict of HTML attributes to apply to the key input field
``val_attrs`` : A dict of HTML attributes to apply to the value input field

这些参数可能很有用,例如,如果需要更改小部件渲染外观的外观。例如,假设我们需要使键和值输入具有特定的宽度。我们可以在我们的ModelForm中这样做

# forms.py

from django import forms
from djangocms_attributes_field.widgets import AttributesWidget

MyCoolForm(forms.ModelForm):
    class Meta:
        fields = ['attributes', ...]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.fields['attributes'].widget = AttributesWidget(key_attrs={'style': 'width:250px'},
                                                            val_attrs={'style': 'width:500px'})

运行测试

您可以通过执行以下操作来运行测试

virtualenv env
source env/bin/activate
pip install -r tests/requirements.txt
python setup.py test

项目详细信息


下载文件

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

源分发

djangocms-attributes-field-3.0.0.tar.gz (16.2 kB 查看哈希值)

上传时间

构建分发

djangocms_attributes_field-3.0.0-py3-none-any.whl (16.8 kB 查看哈希值)

上传时间 Python 3

由以下支持