Tôi không biết bất kỳ cách nào khác trong đồng bằng Django. Các phím tắt như form.field
hoặc form.as_p
thực sự giúp bạn bắt đầu, nhưng cuối cùng có thể rơi trở lại trên html thuần túy. Đó là cách tôi nhìn thấy nó. Không phải để nói rằng không có bất kỳ nhu cầu kiểm soát nhiều hơn về rendering. Tôi nhớ đọc this discussion about form rendering trên danh sách gửi thư của Django.
Simon Willison đang/đang làm việc trên thư viện để cung cấp cho nhà thiết kế quyền kiểm soát nhiều hơn, bạn có thể tìm thấy nguồn của mình on github. Nó lớn hơn một chút, vì vậy nó thậm chí còn không hoạt động nữa. Nhưng liên quan đến câu hỏi của bạn, ví dụ này có vẻ như nó có thể được sử dụng cho bạn:
{% field form.name class="myclass" %}
<!-- renders as -->
<input type="text" name="name" id="id_name" class="myclass">
Thực tế chức năng này nên dễ dàng đạt được. Bạn cần một thẻ mẫu chấp nhận một trường biểu mẫu, cập nhật các thuộc tính widget (các thuộc tính mà bạn có thể đặt trên biểu mẫu đã có) và hiển thị trường đó.
Lặp lại biểu mẫu sẽ mang lại các phiên bản BoundField
, hiển thị chính nó với phương pháp __unicode__
của nó. Bạn sẽ cần phải chuyển tất cả các đối số từ khóa đến hàm render của widgets. Một dự thảo của ý tưởng này:
@register.simple_tag
def field(boundfield, **kwargs):
if self.field.show_hidden_initial:
return self.as_widget(attrs=kwargs) + self.as_hidden(only_initial=True)
return self.as_widget(attrs=kwargs)
Nguồn
2011-02-10 00:20:07