如何将 jQuery / HTML 添加到 Django 模型表单?
How to add jQuery / HTML to Django Model Forms?
我正在尝试将 conditionize.js(如 this example 所示)与我的 Django 模型表单集成。由于模板就是这样:
{{ form|crispy }}
无法添加该示例中的所有 HTML。我发现您可以像这样向 forms.py 中的表单添加 class:
'month': MonthYearWidget(attrs={'class': 'monthfieldclass'})
并在 class 中添加所有 css,但我不确定如何在 HTML 中添加所有其他内容,例如 'data-cond-option' 和输入类型,使 jQuery 工作。
我还找到了 Django Widget Tweaks 库,但我不确定如何将它 运行 与 django-crispy-forms 一起使用,所以尽管我知道最好不要混淆后端和前端逻辑,我一直在寻找一种方法将 html 中的所有内容添加到某处的表单中。
感谢您的帮助!
编写您自己的模板标签。您肯定可以在 Django 小部件调整中找到灵感:https://github.com/kmike/django-widget-tweaks/blob/master/widget_tweaks/templatetags/widget_tweaks.py
例如,您可以编写标签为任何元素添加 html 属性:
from django import template
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter()
def add_attr(element, attr, value):
result = element.replace('>', ' %s="%s">' % (attr, value), 1)
return mark_safe(result)
它将所需的 html 属性及其值附加到 html 元素的末尾。这只是基本示例,不处理扩展 css 类 等,您可能需要使用正则表达式处理所有情况的更复杂的方法。
然后在你的模板中你可以使用它
{{ form|add_attr|crispy }}
(可能需要切换标签)
我正在尝试将 conditionize.js(如 this example 所示)与我的 Django 模型表单集成。由于模板就是这样:
{{ form|crispy }}
无法添加该示例中的所有 HTML。我发现您可以像这样向 forms.py 中的表单添加 class:
'month': MonthYearWidget(attrs={'class': 'monthfieldclass'})
并在 class 中添加所有 css,但我不确定如何在 HTML 中添加所有其他内容,例如 'data-cond-option' 和输入类型,使 jQuery 工作。
我还找到了 Django Widget Tweaks 库,但我不确定如何将它 运行 与 django-crispy-forms 一起使用,所以尽管我知道最好不要混淆后端和前端逻辑,我一直在寻找一种方法将 html 中的所有内容添加到某处的表单中。
感谢您的帮助!
编写您自己的模板标签。您肯定可以在 Django 小部件调整中找到灵感:https://github.com/kmike/django-widget-tweaks/blob/master/widget_tweaks/templatetags/widget_tweaks.py
例如,您可以编写标签为任何元素添加 html 属性:
from django import template
from django.utils.html import conditional_escape
from django.utils.safestring import mark_safe
register = template.Library()
@register.filter()
def add_attr(element, attr, value):
result = element.replace('>', ' %s="%s">' % (attr, value), 1)
return mark_safe(result)
它将所需的 html 属性及其值附加到 html 元素的末尾。这只是基本示例,不处理扩展 css 类 等,您可能需要使用正则表达式处理所有情况的更复杂的方法。
然后在你的模板中你可以使用它
{{ form|add_attr|crispy }}
(可能需要切换标签)