Я только начал работать с Django, пришедшим из лет Spring MVC, и реализация форм выглядит немного сумасшедшей. Если вы не знакомы, формы Django начинаются с класса модели формы, который определяет ваши поля. Spring также начинается с объекта поддержки формы. Но там, где Spring предоставляет taglib для привязки элементов формы к базовому объекту в вашем JSP, Django имеет виджеты форм, привязанные непосредственно к модели. Существуют виджеты по умолчанию, в которых вы можете добавить атрибуты стиля к своим полям, чтобы применять CSS или определять полностью настраиваемые виджеты как новые классы. Все это идет в вашем коде Python. Это кажется мне чокнутым. Во-первых, вы помещаете информацию о своем представлении непосредственно в вашу модель, а во-вторых, вы связываете свою модель с конкретным представлением. Я что-то пропустил?
РЕДАКТИРОВАТЬ: Пример кода в соответствии с просьбой.
Джанго:
# Class defines the data associated with this form
class CommentForm(forms.Form):
# name is CharField and the argument tells Django to use a <input type="text">
# and add the CSS class "special" as an attribute. The kind of thing that should
# go in a template
name = forms.CharField(
widget=forms.TextInput(attrs={'class':'special'}))
url = forms.URLField()
# Again, comment is <input type="text" size="40" /> even though input box size
# is a visual design constraint and not tied to the data model
comment = forms.CharField(
widget=forms.TextInput(attrs={'size':'40'}))
Spring MVC:
public class User {
// Form class in this case is a POJO, passed to the template in the controller
private String firstName;
private String lastName;
get/setWhatever() {}
}
<!-- JSP code references an instance of type User with custom tags -->
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<!-- "user" is the name assigned to a User instance -->
<form:form commandName="user">
<table>
<tr>
<td>First Name:</td>
<!-- "path" attribute sets the name field and binds to object on backend -->
<td><form:input path="firstName" class="special" /></td>
</tr>
<tr>
<td>Last Name:</td>
<td><form:input path="lastName" size="40" /></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="Save Changes" />
</td>
</tr>
</table>
</form:form>