代码之家  ›  专栏  ›  技术社区  ›  Bill Armstrong

使用自定义模板标记的django表单域占位符文本

  •  1
  • Bill Armstrong  · 技术社区  · 8 年前

    我到处找了一个简单的方法来添加 placeholder django表单输入字段的文本元素。有几个 example 希望修改模型窗体或使用 add-ins . 我拼凑了几个不同的例子来提出以下…

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

    模板标记/ 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)
    

    模板/my_app/customer_form.html (实现引导)

    <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 . (?)

    我的问题是:所有其他的例子 field.widget.attrs 在课堂上 __init__ 表单(或视图/模型中的其他部分)的定义,而不是通过自定义标记-使用自定义标记是否存在设计问题,只是表单不好还是其他方面好?

    1 回复  |  直到 8 年前
        1
  •  0
  •   Bill Armstrong    8 年前

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

    如果我必须编写代码,那么在特定的上下文中编写它会更容易,除非它是重复的,然后作为一个单独的模块或模板标记—对我来说,这两种方法都差不多。

    如果可导入的自定义模板标记已经编写并且可以导入,那么它们确实具有优势,例如 {% load humanize %} .