【问题标题】:How do I escape single quotes in a django-widget-tweaks's render_field tag?如何在 django-widget-tweaks 的 render_field 标签中转义单引号?
【发布时间】:2019-08-28 06:38:24
【问题描述】:

我正在尝试使用 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 将小部件中的单引号更改为双引号时,我遇到了解析错误。

showBtnjs函数如下:

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

我使用 django-widget-tweaks 的原因是为了让所有 html 类和属性在模板中保持隔离。

我已经尝试过的:

  • 将单引号表示为文本实体&amp;#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)

【问题讨论】:

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


    【解决方案1】:

    好的...所以这就是我最终解决它的方法。

    不是使用类似于普通 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 属性就被正确解析了。

    【讨论】:

      猜你喜欢
      • 2019-04-01
      • 2016-01-08
      • 2017-09-28
      • 2018-12-17
      • 2018-05-04
      • 1970-01-01
      • 2016-06-15
      • 2017-06-25
      • 1970-01-01
      相关资源
      最近更新 更多