Я везде искал простой способ добавить текстовый элемент placeholder
в поле ввода формы Django.Существует несколько примеров , которые пытаются изменить формы модели или использовать надстройки .Я собрал несколько разрозненных примеров, чтобы получить следующее ...
Это мой первый шаблонный тег, и перед тем, как добавить много изменений, я хотел бы убедиться, что это правильно:
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>
Firefox
Несколько вещей, которые я заметил:
a) Похоже, я могу (i) использовать теги полей в пользовательском теге и (ii) я могу использовать обычный текст.
b) Нет пробела между именем пользовательского тега и значением.Если есть пробел, он выбрасывает TemplateSyntaxError
, что placeholder requires 2 arguments, 1 provided
.(?)
Мой вопрос таков: все другие примеры SO используют field.widget.attrs
в определениях класса __init__
формы (или в других местах в представлениях / моделях), а не через пользовательский тег -есть проблема дизайна с использованием пользовательского тега, это просто плохая форма или иное нормально?