【问题标题】:Using django-widget-tweaks with Jinja2 template engine在 Jinja2 模板引擎中使用 django-widget-tweaks
【发布时间】:2018-05-04 19:05:37
【问题描述】:

我使用 django v1.11.7 和 Jinja2 v2.10 作为模板引擎。

在我的网站中,我希望使用引导程序呈现表单。我发现django-widget-tweaks 可以用于此集成。

此包不适用于 Jinja 模板,因为它需要将自定义标签集加载到 Jinja 环境中。加载标签集可能很复杂,因为我可能需要编写一个扩展。

有没有一种简单的方法可以让 django-widget-tweaks 与 Jinja 一起工作?或者还有其他方法可以将 boostrap 与 Jinja 集成吗?

【问题讨论】:

    标签: django-forms jinja2 django-widget-tweaks


    【解决方案1】:

    有点晚了,但也许这会有所帮助。

    我所做的是导入我想使用的函数并在我的 jinja 模板中调用它们:

    app_root.jinja2.py

    from jinja2 import Environment
    from jinja2 import contextfunction
    
    from widget_tweaks.templatetags.widget_tweaks import render_field
    
    
    def environment(**options):
        env = Environment(**options)
        env.globals.update({
            'render_field': render_field,
        })
        return env
    

    在模板中

    {% set class = class + "my-html-class" %}
    {{ render_field(field, class) }}
    

    编辑:任何有一点 Jinja 和模板标签经验的人都知道这行不通。对于我目前的需求,我在我的 jinja 配置中定义了以下两个函数,并将在以后评估我的需求。

    def set_attr(bound_field, attr, value):
        bound_field.field.widget.attrs[attr] = value
        return bound_field
    
    def add_class(bound_field, value):
        try:
            bound_field.field.widget.attrs['class'] += value
        except KeyError:
            bound_field.field.widget.attrs['class'] = value
        return bound_field
    

    编辑 2 其他有用的链接:https://github.com/niwinz/django-jinja/issues/140

    为了使这个解决方案发挥作用,我必须进行以下更改: jinja2.py

    from jinja2 import Environment
    from widget_tweaks.templatetags.widget_tweaks import add_class
    from widget_tweaks.templatetags.widget_tweaks import set_attr
    
    
    def environment(**options):
        env = Environment(**options)
        env.filters['set_attr'] = set_attr
        env.filters['add_class'] = add_class
        return env
    

    template.html

    {{ form.field |set_attr('attr:val') }}
    {{ form.field |add_class('my_class') }}
    

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 2016-08-23
      • 2017-09-28
      • 2015-08-22
      • 1970-01-01
      • 2014-03-24
      • 2016-09-19
      • 2018-07-15
      • 1970-01-01
      相关资源
      最近更新 更多