Django表单在forms.py中添加锚点标签

0 投票
1 回答
1432 浏览
提问于 2025-04-17 13:37

在Django的表单中,怎么在表单类里添加一个锚点标签,而不去修改form.html文件呢?

forms.py

class HealthCheckerForm(PortalModelForm):
    name = forms.CharField(max_length=128,required = False ,help_text="Enter Name", label='Name')
    description = forms.CharField(max_length=128, required = False, label='desc*')

    age = forms.CharField(max_length=128,required = False ,help_text="Enter age", label='age')
    group = forms.CharField(max_length=128, required = False, label='group*')

form.html

{% for field in form %}
    <div class="fieldWrapper">
        <div class="fieldInfo">
            {{ field.label_tag }}{{ field }}
            <span class="errorList">{{ field.errors|striptags}}</span>
        </div>
    </div>
{% endfor %}

不修改form.html的情况下,怎么添加一个按钮或者锚点标签呢?

提前谢谢大家!

1 个回答

2

我希望我理解了你的问题;这听起来和我今天遇到的问题很像。

基本上,你可以自己创建一个小部件(Widget)和一个字段(Field)。

from django.utils.safestring import mark_safe

class AnchorOnlyWidget(forms.Widget):
    def render(self, name, value, attrs):
        final_attrs = self.build_attrs(attrs, name=name)
        if hasattr(self, 'initial'):
            value = self.initial
        return mark_safe("<a href='%s' %s>%s</a>" %
            (value, flatatt(final_attrs), value))

    def _has_changed(self, initial, data):
        return False

class AnchorOnlyField(forms.FileField):
    widget = AnchorOnlyWidget
    def __init__(self, widget=None, label=None, initial=None, help_text=None):
        forms.Field.__init__(self, label=label, initial=initial,
            help_text=help_text, widget=widget)

    def clean(self, value, initial):
        self.widget.initial = initial
        return initial

然后把它添加到你的表单里:

class HealthCheckerForm(PortalModelForm):
    youranchor = AnchorOnlyField(help_text="the help")
    ...

撰写回答