我正在研究如何在 Django 中最好地创建可用于显示或编辑数据的 HTML 页面。也就是说,我希望字段的值在显示模式下显示为文本,但在编辑/添加模式下显示在其小部件中。看来 Django 的设计初衷并不是这样做:这些字段总是出现在它们的小部件中(例如,文本输入、文本区域、
ETC)。
是否有一种通用的技术来处理这个问题,除了使用一个表单而不使用另一个表单之外?
我正在考虑一个可用于每个表单字段的自定义模板标签过滤器,例如:
{{ form.field_name|render_field:mode }}
其中 render_field 将根据模式返回字段的 HTML 小部件,或者仅返回文本形式的值。
我是否错过了什么,或者这是一个可行的解决方案吗?
显然是在回答我自己的问题。我最终得到了一个由三部分组成的解决方案:
- 将模型附加到表单,这样我将为每个字段提供默认的显示小部件
- 使用模板标签编写表单,并向其传递 form.field、用户和操作
- 编写一个渲染模板标签来处理#2
步骤1:
form.model = Model(...)
第二步:
{{form.field1.label}}
{% render form.field1 user action %}
{{form.field2.label}}
{% render form.field2 user action %}
第三步:
就像是:
def render(formfield, user, action, default_text="Private"):
if not user.is_authenticated():
action = "view"
if action == "view":
if user.is_authenticated():
fieldname = formfield.name
retval = str(getattr(formfield.form.model, fieldname))
else:
retval = default_text
else:
retval = formfield.as_widget()
return retval
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)