django表单动态属性查找

伊戈尔·贝洛(Igor Belo)

我面临一个问题,无法解决。

我的申请表中包含以下表格:

class ContentForm(ModelForm):
    class Meta:
        model = Content
        fields = ('url_1','url_2','url_3','url_4','url_5',)
        widgets = {
            'url_1': forms.URLInput(attrs={'class': 'form-control', 'maxlength': 100}),
            'url_2': forms.URLInput(attrs={'class': 'form-control', 'maxlength': 100}),
            'url_3': forms.URLInput(attrs={'class': 'form-control', 'maxlength': 100}),
            'url_4': forms.URLInput(attrs={'class': 'form-control', 'maxlength': 100}),
            'url_5': forms.URLInput(attrs={'class': 'form-control', 'maxlength': 100}),
        }

我想做的是通过循环动态生成这些url字段。我采用了这种方法(方法实现了用于动态属性查找的模板标记):

{% for i in 12345|make_list %}
    {% with url='url_'|add:i %}
      {{ form|getattribute:url }}
    {% endwith %}
{% endfor %}

但是,它不起作用。Django没有渲染输入字段,并抱怨我的表单对象没有名为的属性url_1如果我url_1直接调用同一表单属性,它将起作用。

getattributetemplate标签的实现此处相同

[更新:在下面发布了我的代码]

views.py

@login_required
def new(request):
    form = ContentForm()
    return render(request, "new.html", {'form': form})

new.html

<form action="{% url 'create_content' %}" method="POST">
...
{% include 'partials/urls.html' %}
...
</form>

urls.html

{% load getattribute %}

{% for i in 12345|make_list %}
    {% with url='url_'|add:i %}
      <label>URL {{i}}</label>
      {{ form|getattribute:url }}
    {% endwith %}
{% endfor %}

getattribute.py

import re
from django import template
from django.conf import settings

numeric_test = re.compile("^\d+$")
register = template.Library()

def getattribute(value, arg):
        """Gets an attribute of an object dynamically from a string name"""

        return getattr(value, arg)

    if hasattr(value, str(arg)):
        return getattr(value, arg)
    elif hasattr(value, 'has_key') and value.has_key(arg):
        return value[arg]
    elif numeric_test.match(str(arg)) and len(value) > int(arg):
        return value[int(arg)]
    else:
        return settings.TEMPLATE_STRING_IF_INVALID

register.filter('getattribute', getattribute)

ps .:正在运行的Django版本为1.9.2

贾维德

更改getattribute.py如下:

import re
from django.forms import Form, ModelForm
from django import template
from django.conf import settings

numeric_test = re.compile("^\d+$")
register = template.Library()

def getattribute(value, arg):
    """Gets an attribute of an object dynamically from a string name"""
    if hasattr(value, str(arg)):
        return getattr(value, arg)
    elif hasattr(value, 'has_key') and value.has_key(arg):
        return value[arg]
    elif numeric_test.match(str(arg)) and len(value) > int(arg):
        return value[int(arg)]
    elif issubclass(value.__class__, (Form, ModelForm)) and arg in value.fields:
        return value[arg]
    else:
        return settings.TEMPLATE_STRING_IF_INVALID

register.filter('getattribute', getattribute)

您可以在第17和18行中看到需要特殊条件的行,这些行与表单有关,并返回了相关的呈现的小部件;)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用动态查找属性

来自分类Dev

Django查找提交的表单

来自分类Dev

Django动态多步表单

来自分类Dev

Django 1.7,动态管理表单

来自分类Dev

我们如何以Django管理表单添加动态html5数据属性

来自分类Dev

我们如何在Django管理表单中添加动态html5数据属性

来自分类Dev

覆盖Django表单的默认属性

来自分类Dev

更新动态表单导轨中的属性

来自分类Dev

Django动态访问模型属性

来自分类Dev

Django-管理表单中的动态文本

来自分类Dev

Django:使用外键保存动态表单

来自分类Dev

Django动态表单集UpdateView不更新

来自分类Dev

Django动态表单-验证选择字段

来自分类Dev

如何动态检索Django表单类?

来自分类Dev

Django模板未呈现动态表单错误

来自分类Dev

Django动态表单字段生成

来自分类Dev

Django 模型表单 - 动态创建的字段的顺序

来自分类Dev

基于CharField选择动态生成Django表单

来自分类Dev

将表单字段动态添加到Django表单

来自分类Dev

将非表单元素注入动态Django表单吗?

来自分类Dev

Django如何动态查找字段

来自分类Dev

Django表单EmailField不接受css属性

来自分类Dev

在视图上更改Django表单属性

来自分类Dev

如何使用模型属性验证Django表单?

来自分类Dev

使用表单更新Django中的模型属性

来自分类Dev

如何从模型属性填充django管理表单?

来自分类Dev

Django:“表单对象没有属性......”错误

来自分类Dev

django 表单模型中的属性

来自分类Dev

设置动态嵌套表单名称和ID属性