django - 如何在 django-widget-tweaks 的 render_field 标签中转义单引号?
问题描述
我正在尝试使用 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 类和属性隔离。
我已经尝试过的:
- 将单引号表示为文本实体
'
。它呈现模板(没有解析错误),但实际上并没有将 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)
解决方案
好的......这就是我最终解决它的方法。
不是使用类似于普通 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
属性就被正确解析了。
推荐阅读
- symfony - 您没有足够的权限来打开元素或执行所需的操作
- javascript - Firebase - IN查询在where子句中不起作用,结果是空白数组
- java - 根据其他列表中的匹配对象更新列表中两个对象的属性
- python - 熊猫数据框。聚合列取决于另一列中的值
- reactjs - 单击后如何更改 React js 上的按钮材质 UI 标签的颜色?
- sql - SQL 使用 Select 语句匹配来自 2 个不同表的列
- python - Django:如何切换两个对象之间的关系
- angular - 如何防止 Angular Material DatePicker 切换月份和日期?
- java - 有没有办法用重复的 if-then 模式来简化代码?
- java - Android:由于活动无法获得焦点而被 Android 杀死的活动