向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 Android同步不同页面上的按钮   java评测每个类收集的垃圾对象实例数   java(Spring MVC+Hibernate 4+Test 4)自动连线DAO返回NULL   java Android编辑文本和虚拟键盘   java Selenium与BrowserMobProxy   JAVAlang.NoClassDefFoundError:com/sun/jersey/spi/inject/Errors$关闭原因?   java为什么在我成功登录后仍然会出现“不正确的帐户或密码或用户类型”   安卓应用程序在重新启动java时崩溃。网UnknownHostException:无法解析主机   多线程在Java中同步共享静态对象的正确方法是什么?   未调用自定义注释的java类验证(约束类)   java如何将指定目录的存档文件放入所需位置?   java如何识别Selenium中的每个编辑文本字段,如果它们的Xpath都相同   使用gwtmockito/mockito的java简单单选按钮单元测试?