Comecei a trabalhar com o Django vindo de anos do Spring MVC e a implementação de formulários parece um pouco louca. Se você não estiver familiarizado, os formulários do Django começam com uma classe de modelo de formulário que define seus campos. O Spring começa da mesma forma com um objeto de suporte de formulário. Mas onde o Spring fornece um taglib para vincular elementos de formulário ao objeto de backup em seu JSP, o Django possui widgets de formulário vinculados diretamente ao modelo. Existem widgets padrão nos quais você pode adicionar atributos de estilo aos seus campos para aplicar CSS ou definir widgets completamente personalizados como novas classes. Tudo acontece no seu código python. Isso parece loucura para mim. Primeiro, você está colocando informações sobre sua visão diretamente em seu modelo e, em segundo lugar, está vinculando seu modelo a uma visão específica. Estou esquecendo de algo?
EDIT: Alguns exemplos de código conforme solicitado.
Django:
# 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>