将 django-widget-tweaks 与 Jinja2 模板引擎一起使用
Using django-widget-tweaks with Jinja2 template engine
我使用 django v1.11.7 和 Jinja2 v2.10 作为模板引擎。
在我的网站中,我希望使用 bootstrap 呈现表单。我发现 django-widget-tweaks 可用于此集成。
此包不适用于 Jinja 模板,因为它需要将自定义标签集加载到 Jinja 环境中。加载标签集可能会很复杂,因为我可能需要编写一个扩展。
有没有简单的方法让 django-widget-tweaks 与 Jinja 一起工作?或者还有其他方法可以将 boostrap 与 Jinja 集成吗?
有点晚了,但也许这会有所帮助。
我所做的是导入我想使用的函数并在我的 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
其他有用的link: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') }}
我使用 django v1.11.7 和 Jinja2 v2.10 作为模板引擎。
在我的网站中,我希望使用 bootstrap 呈现表单。我发现 django-widget-tweaks 可用于此集成。
此包不适用于 Jinja 模板,因为它需要将自定义标签集加载到 Jinja 环境中。加载标签集可能会很复杂,因为我可能需要编写一个扩展。
有没有简单的方法让 django-widget-tweaks 与 Jinja 一起工作?或者还有其他方法可以将 boostrap 与 Jinja 集成吗?
有点晚了,但也许这会有所帮助。
我所做的是导入我想使用的函数并在我的 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 其他有用的link: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') }}