如何在django-widget-tweaks的render_field标签中转义单引号?

时间:2019-04-06 16:11:43

标签: django django-templates django-widget-tweaks

我正在尝试使用django-widget-tweaks呈现以下表单字段:

{% render_field profile_form.bio class+="form-control" id="bio" rows="3" oninput="showBtn('updateProfile')" %}

对此:

<textarea class="form-control" id="bio" rows="3" oninput="showBtn('updateProfile')"></textarea>

但是,由于Django将小部件中的单引号更改为双引号,因此出现了解析错误。

showBtn js函数如下:

// Shows a button given an id
showBtn: function (selector) {
  let btn = document.getElementById(selector);
  btn.classList.remove("btn-hidden");
}

我之所以使用django-widget-tweaks,是为了将所有html类和属性隔离在模板中。

我已经尝试过的:

  • 将单引号表示为文本实体&#39;。它呈现了模板(没有解析错误),但实际上并未将ascii替换为引号,因此js不会被触发
  • 用斜杠转义
  • 使用safe模板标签
  • 使用autoescape模板标签

作为参考,这是表格模型:

# forms.py
class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = ["bio"]

原始模型:

# models.py
class Profile(models.Model):
    """ Non-auth related user information about an user"""
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)

1 个答案:

答案 0 :(得分:0)

好吧...这就是我最终解决它的方式。

这些软件包的templatetag可以使用,而不是使用类似于普通HTML属性的语法(这就是为什么我首先喜欢django-widget-tweaks的原因)。但这就像django-widget-tweaks的一些错误的解决方法。

{% render_field profile_form.bio|add_class:"form-control"|attr:"id:bio"|attr:"rows:3"|attr:"oninput:showBtn('updateProfile')" %}

通过这种方式可以正确解析oninput属性。