Question

Je viens de commencer à travailler avec Django provenant d'années de Spring MVC et la mise en œuvre des formulaires semble être légèrement folle. Si vous n'êtes pas familier, Django Forms Commence par une classe de modèle de formulaire qui définit vos champs. Spring commence également par un objet de dossier. Mais là où le printemps fournit un tague Pour lier des éléments de formulaire à l'objet de support dans votre JSP, Django a des widgets de formulaire liés directement au modèle. Il existe des widgets par défaut où vous pouvez ajouter des attributs de style à vos champs pour appliquer CSS ou définir des widgets complètement personnalisés comme de nouvelles classes. Tout va dans votre code Python. Cela me semble fou. Tout d'abord, vous mettez des informations sur votre vue directement dans votre modèle et, deuxièmement, vous liez votre modèle à une vue spécifique. Est-ce que je manque quelque chose?

Edit: un exemple de code demande.

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>

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
scroll top