You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Django表单组件中避免单引号被自动转为双引号?

解决Django ModelForm中HTML属性单引号被自动转换的问题

嘿,这个问题我之前也碰到过——Django的模板渲染系统确实会自动把属性值用双引号包裹,这是它遵循HTML标准的默认行为,但如果你的场景确实需要单引号(比如某些特定JS库的要求),有两种靠谱的解决办法:

方法一:自定义Widget重写渲染逻辑

你可以创建一个自定义的Widget,手动控制属性的引号格式:

from django.forms.widgets import TextInput
from django.utils.html import format_html

class CustomTextInput(TextInput):
    def render(self, name, value, attrs=None, renderer=None):
        attrs = attrs or {}
        # 提取我们需要用单引号的属性
        data_form_data = attrs.pop('data-form-data', '')
        # 构建其他常规属性(保持Django默认的双引号)
        base_attrs = self.build_attrs(attrs)
        attr_str = ' '.join([f'{k}="{v}"' for k, v in base_attrs.items()])
        
        # 手动添加带单引号的data-form-data属性
        if data_form_data:
            attr_str += f" data-form-data='{data_form_data}'"
        
        # 渲染最终的input标签
        return format_html('<input type="text" name="{}" value="{}" {}>', name, value or '', attr_str)

然后在你的ModelForm中使用这个自定义Widget:

from django import forms
from .models import YourModel

class YourForm(forms.ModelForm):
    class Meta:
        model = YourModel
        fields = ['your_field']
        widgets = {
            'your_field': CustomTextInput(attrs={'data-form-data': 'your_target_value'})
        }

方法二:模板中手动渲染字段

如果不想自定义Widget,也可以在模板里直接手写input标签,完全控制引号格式:

{% if form.your_field.errors %}
    <div class="error">
{% endif %}
<input 
    type="text" 
    name="{{ form.your_field.name }}" 
    value="{{ form.your_field.value|default:'' }}" 
    data-form-data='{{ form.your_field.value|default:'' }}'
    {% for attr, val in form.your_field.field.widget.attrs.items %}
        {{ attr }}="{{ val }}"
    {% endfor %}
>
{% if form.your_field.errors %}
        {% for error in form.your_field.errors %}
            <p>{{ error }}</p>
        {% endfor %}
    </div>
{% endif %}

补充说明

其实HTML规范里单引号和双引号包裹属性值都是合法的,Django的默认行为是符合标准的。除非你有特定的业务需求(比如第三方JS库对引号格式有严格要求),否则不需要刻意修改。但如果必须用单引号,上面两种方法都能解决问题。

内容的提问来源于stack exchange,提问作者amin_rohmat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:50:03