【问题标题】:Django: assign accesskey to label instead of selectDjango:将访问键分配给标签而不是选择
【发布时间】:2011-01-02 23:01:08
【问题描述】:
我正在开发一个必须尽可能易于访问的网站。在将访问键分配给我的表单字段时
widget=FieldWidget(attrs={'accesskey':'A'})
我发现 w3c 验证器不会使用 select 标记中的 accesskey 验证 xhtml 严格页面。无论如何,我找不到将访问键分配给与选择字段相关的标签的方法(使选择可访问的正确方法)。有办法吗?
谢谢
【问题讨论】:
标签:
django
select
accessibility
label
【解决方案1】:
有趣的问题。 HTML 4.01 还禁止在 select 中使用 accesskey。
我相信简短的回答是:不在标准 Django 中。
更长的答案:我查看了django/forms/fields.py 和.../widgets.py 中的代码,标签被严格作为字符串处理(强制为smart_unicode())。想到了四种可能的解决方案,前三种不太好:
-
忽略验证失败。我讨厌这样做,但有时它是必要的。大多数浏览器在允许的范围内比 DTD 宽松得多。如果您可以让访问密钥即使在技术上位于错误的位置时也能正常工作,那可能是最简单的方法。
-
捕获模板的输出并进行某种丑陋的搜索和替换。 (废话!)
-
通过MonkeyPatching 向小部件/表单代码添加新功能。 MonkeyPatch django.forms.fields.Field 捕获并保存新的 arg (label_attrs?)。 MonkeyPatch forms.forms.BoundField 的label_tag() 方法来处理新的widget.label_attrs 值。
我故意不提供更多细节。如果您对代码足够了解并可以对其进行 MonkeyPatch,那么您就足够聪明,知道这样做的内在危险。
-
进行与 #3 相同的功能更改,但将其作为提交到 Django 代码库的补丁。这是对每个人来说最好的长期答案,但对你来说也是最有效的。
更新: 如果您自己生成 <label> 标记,Yoni Samlan 的自定义过滤器链接 (http://www.djangosnippets.org/snippets/693/) 有效。我的答案是针对仍然使用 Forms 的全部功能但尝试调整结果 <label>。