Tôi mới bắt đầu làm việc với Django đến từ những năm của Spring MVC và các hình thức triển khai biểu mẫu là hơi điên rồ. Nếu bạn không quen thuộc, các biểu mẫu Django bắt đầu bằng một lớp mô hình biểu mẫu xác định các trường của bạn. Mùa xuân tương tự bắt đầu với một đối tượng ủng hộ mẫu. Nhưng trong đó Spring cung cấp một taglib cho các thành phần biểu mẫu liên kết với đối tượng sao lưu trong tệp JSP của bạn, Django có các tiện ích biểu mẫu được gắn trực tiếp vào mô hình. Có các widget mặc định nơi bạn có thể thêm các thuộc tính kiểu cho các trường của mình để áp dụng CSS hoặc định nghĩa các widget hoàn toàn tùy chỉnh như các lớp mới. Tất cả diễn ra trong mã python của bạn. Điều đó có vẻ như hạt dẻ với tôi. Đầu tiên, bạn đang đưa thông tin về chế độ xem của bạn trực tiếp vào mô hình của mình và thứ hai là bạn đang ràng buộc mô hình của mình với một chế độ xem cụ thể. Tui bỏ lỡ điều gì vậy?
EDIT: Một số mã ví dụ theo yêu cầu.
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'}))
MVC mùa xuân:
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>