覆盖Crispy Forms模板失败

时间:2018-04-06 22:41:54

标签: django django-crispy-forms

我正在尝试覆盖Crispy Forms 1.7.0中的标签的默认模板。作为第一步,我尝试将相关模板(templates/bootstrap3/layout/tab-link.html)从crispy表单模板复制到我的应用程序模板目录(myapp / templates / crispy_overrides / tab-link.html),但是当我关闭时它停止正确呈现标签我试图在布局中使用模板。

以下是我的表单布局对象和模板的相关部分。如果我注释掉template=...行,那么一切正常。

我做错了吗?

TabHolder(
    Tab('D.DDD°',
        'latitude',
        'longitude',
        template='crispy_overrides/tab-link.html',
        ),
    Tab(
        'DD°, DD.DD\'',
        'lat_dmm_d',
        'lat_dmm_m',
        'lon_dmm_d',
        'lon_dmm_m',
        template='crispy_overrides/tab-link.html',
    ),
    Tab(
        'DD°, DD\', SS.SS\'\'',
        'lat_dms_d',
        'lat_dms_m',
        'lat_dms_s',
        'lon_dms_d',
        'lon_dms_m',
        'lon_dms_s',
        template='crispy_overrides/tab-link.html',
    ),
    Tab('UTM',
        'utm_zone',
        'utmx',
        'utmy',
        template='crispy_overrides/tab-link.html'
    ),
),

tab-link.html

<li class="tab-pane{% if 'active' in link.css_class %} active{% endif %}"><a href="#{{ link.css_id }}" data-toggle="tab">{{ link.name|capfirst }}{% if tab.errors %}!{% endif %}</a></li>

1 个答案:

答案 0 :(得分:0)

当然我在发布问题之后就知道了。 叹息

显然,对于Tab对象,您需要覆盖link_template而不是template。看起来这可能是一个错误。

布局类的相关部分:

class Tab(Container):
    """
    Tab object. It wraps fields in a div whose default class is "tab-pane" and
    takes a name as first argument. Example::
        Tab('tab_name', 'form_field_1', 'form_field_2', 'form_field_3')
    """
    css_class = 'tab-pane'
    link_template = '%s/layout/tab-link.html' # Notice how it isn't 'template'

    def render_link(self, template_pack=TEMPLATE_PACK, **kwargs):
        """
        Render the link for the tab-pane. It must be called after render so css_class is updated
        with active if needed.
        """
        link_template = self.link_template % template_pack
        return render_to_string(link_template, {'link': self})