html - Django模板中的Tabindex不会将光标移动到正确的字段
问题描述
我有一个 Django 表单,希望用户能够按该顺序切换到用户名、密码和登录按钮。
tabindex 在我的模板中似乎不起作用。相反,它按该顺序移动到用户名、登录按钮和密码。
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td><div tabindex="1">{{ form.username }}</div></td>
<td rowspan="2"><div tabindex="3"><button type="submit" class="btn btn-success">Login</button></div></td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td><div tabindex="2">{{ form.password }}</div></td>
</tr>
</table>
</form>
我究竟做错了什么?
解决方案
我认为您必须定义一个自定义模板过滤器,将 tabindex 属性添加到绑定字段的小部件:
如何在模板中添加过滤器?
Ans - 您必须在您的应用程序中创建一个名为“templatetags”的目录。您希望此目录被识别为Python package
,因此请确保创建一个空__init__.py
文件。接下来,继续创建 Python 文件,该文件将保存您的标签并将其命名为类似app_filters.py
或易于识别的类似名称。它看起来像...
Django Project
-> my_app
---> models.py
---> views.py
---> templatetags
-----> __init__.py
-----> app_filters.py
更多请点击这里
app_filters.py
from django import template
register = template.Library()
@register.filter
def tabindex(value, index):
"""
Add a tabindex attribute to the widget for a bound field.
"""
value.field.widget.attrs['tabindex'] = index
return value
注意:添加模板标签模块后,您需要重新启动服务器,然后才能在模板中使用标签或过滤器。
然后,添加|tabindex:n
到模板中的字段。例如:
your_html_file.html
{% load app_filters %}
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td><div>{{ form.username|tabindex:1 }}</div></td>
<td rowspan="2"><div><button tabindex="3" type="submit" class="btn btn-success">Login</button></div></td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td><div>{{ form.password|tabindex:2 }}</div></td>
</tr>
</table>
</form>
推荐阅读
- javascript - 当我尝试运行时出现“TypeError:无法获取未定义或空引用的属性‘年龄’”
- linux - 我无法保护我的服务器之间的复制文件
- c++ - 隐式可转换参数,但属于 ref 类型
- python - 在numpy中转换为索引数组
- mysql - 从所有对话中选择最后一条消息(MySQL)
- kubernetes - Kuberentes 集群 IP 与服务的 FQDN
- python - Python 从列表或文本创建 md5 哈希
- python-3.x - 使用wfdb读取任意数据库的辅助信息
- arrays - 使用 New-AzureRmResourceGroupDeployment 时无法在 powershell 中检索 ARM 输出数组
- mysql - MySql从JPA以错误的顺序插入数据