向django模型添加属性。

djangocms-attributes-field的Python项目详细描述


pypibuildcoverage

任意html的jsonfield的一个自以为是的实现 元素属性。

这个项目旨在提供一种合理的存储和管理方法 任意HTML元素属性,以便以后将其发送到模板中。

有多种类型的属性,使用“normal”django 在业务模型上为每个模型添加模型字段的方法在 最好而且可能需要相关的表来允许任何数量的情况 应支持相同类型的属性(即数据属性)。 这会导致性能问题。

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

preview.gif

贡献

这是一个开源项目。我们很高兴收到您的 以问题和请求的形式提供反馈。在提交您的 拉动请求,请查看我们的contribution guidelines

我们感谢所有帮助创建和维护此软件包的贡献者。 贡献者列在contributors 章节。

你能做的最简单的贡献之一就是帮助翻译这个插件 Transifex

文档

请参阅setup.py中的REQUIREMENTS。 其他依赖项的文件:

pythondjangodjangocms

安装

对于手动安装:

  • 运行pip install djangocms-attributes-field
  • djangocms_attributes_field添加到INSTALLED_APPS
  • 运行python manage.py migrate djangocms_attributes_field

配置

属性字段

在模型中使用此字段。模型:

# 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
属性:[字段名]\u 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实例。)

除了很好地封装转换键/值的枯燥任务之外 对成字符串并正确转义和标记为安全,此属性还 确保^ {EM1}$现有的“EEM>键/值对”,其后添加了键 到字段的excluded_keys也不包含在输出字符串中。

属性窗口

默认情况下,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(MyCoolForm, self).__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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JAXB封送字符串,具有xml值,且不转义该值   java ModelMapper转换器不工作   java像HH000412或HCANN000001这样的前缀是什么意思?   验证日期输入修复java。lang.numberformatexception错误   当表具有外键时,java Telosys代码生成失败   如何使所有派生类一起只能实例化一个实例的单例抽象基类?(爪哇)   java如何在非静态服务类中使用广播接收器   java nutch爬虫相对URL问题   使用Jboss DMR下载/保存java附件   Rest模板:无法提取响应:当我们得到xml响应时,没有找到适合响应类型的HttpMessageConverter,没有绑定到JAVA对象   java如何编写可扩展窗格/面板/卡的代码   java是在ITreeViewerListener的treeExpanded()之前调用ContentProvider的getChildren()吗?   java将JComponent添加到小程序窗格   java混淆:使用简单逻辑的Flames程序