使用Jinja2模板引擎与django-widget-tweaks

5

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

在我的网站中,我希望使用Bootstrap来渲染表单。我发现 django-widget-tweaks 可以用于此集成。

由于它需要将自定义标签集加载到Jinja环境中,因此这个软件包无法与Jinja模板一起使用。加载标签集可能很复杂,因为我可能需要编写扩展。

有没有简单的方法让django-widget-tweaks与Jinja一起工作?或者有没有其他集成Bootstrap和Jinja的方法?

1个回答

4
有点晚但或许可以帮到您。
我所做的是导入我想要使用的函数并在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') }}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接