使用自定义模板标记的Django表单字段占位符文本

时间:2018-06-01 05:34:01

标签: python html django python-3.x django-templates

我到处寻找一种将placeholder文本元素添加到Django Form输入字段的简单方法。有几个example用于修改模型表单或使用add-ins。我拼凑了几个不同的例子来提出以下内容......

这是我的第一个自定义模板标记,在添加大量模板更改之前,我想验证这是否正确:

templatetags / placeholder.py

from django.template import Library
import re

register = Library()

def placeholder(value, token):
    value.field.widget.attrs["placeholder"] = token
    return value

register.filter(placeholder)

templates / my_app / customer_form.html (实施Bootstrap)

<div class="container">
    <h5>Add a New Customer</h5>
    <form method="post">{% csrf_token %}
        <table class="table table-borderless table-sm table-half">
            <tr><td>{{ form.customer | placeholder:'Customer Name' }}</td></tr>
            <tr><td>{{ form.address1 | placeholder:'Address' }}</td></tr>
            <tr><td>{{ form.address2 | placeholder:'Address' }}</td></tr>
            <tr><td>{{ form.city | placeholder:'City' }}</td></tr>
            <tr><td>{{ form.state | placeholder:'State' }}</td></tr>
            <tr><td>{{ form.zip | placeholder:'Zip' }}</td></tr>
        </table>
        <input type="submit" class="btn btn-outline-primary" value="Add" />
    </form>
</div>

火狐

enter image description here

我注意到的一些事情:

a)看起来我可以(i)在自定义标签中使用字段标签,(ii)我可以使用纯文本。

b)自定义标记名称与值之间没有空格。如果有空格,则会TemplateSyntaxError placeholder requires 2 arguments, 1 provided。 (?)

我的问题是:SO上的所有其他示例在表单的field.widget.attrs类(或视图/模型中的其他位置)中使用__init__而不是通过自定义标记 - 是否存在使用自定义标签的设计问题,它只是不好的形式或其他方面很好吗?

1 个答案:

答案 0 :(得分:0)

我现在使用了自定义模板标记并传入预格式化的上下文项。我得出的结论是,这个问题没有答案。

如果我必须编写代码,那么在特定的上下文中编写代码会更容易,除非它重复,然后作为一个单独的模块或模板标记 - 要么(对我而言)也有相同的努力。 / p>

可导入的自定义模板标记如果已经编写并且可以导入(例如{% load humanize %}),则具有优势。