DetailView 和模板
DetailView and templates
Django 1.9.7
你能帮我解决三个关于DetailView的问题吗:
为什么 DetailView 不将表单放入上下文中而 CreateView 会?
我的意思是编写一个模板非常麻烦,其中每个字段都单独显示,如 object.headline 或 object.content。在 CreateView 的情况下,我们只需将 {{ form.as_p }} 放入模板中。方便多了。所以,这背后肯定有一些逻辑是我经验不足,感受不到的。
是否有第三方应用程序可以使用 DetailView 的模板标签?或者用其他方法自动选择要在模板中显示的字段。
或者我应该自己在 get_context_data 中填一个表格?
DetailView
不适用于编辑。为此目的使用 UpdateView
。
如果您想以相同的格式循环显示每个字段,则必须在上下文中将您的字段名称作为列表传递,然后循环遍历此列表:
{% for field_name in field_names %}
<tr>
<th>{% get_field_label object field_name %}</th>
<td>{% get_field_value object field_name %}</td>
</tr>
{% endfor %}
并创建自定义模板标签:
@register.simple_tag
def get_field_label(obj, name):
return obj._meta.get_field(name).verbose_name
@register.simple_tag
def get_field_value(obj, name):
return getattr(obj, value)
Django 1.9.7
你能帮我解决三个关于DetailView的问题吗:
为什么 DetailView 不将表单放入上下文中而 CreateView 会? 我的意思是编写一个模板非常麻烦,其中每个字段都单独显示,如 object.headline 或 object.content。在 CreateView 的情况下,我们只需将 {{ form.as_p }} 放入模板中。方便多了。所以,这背后肯定有一些逻辑是我经验不足,感受不到的。
是否有第三方应用程序可以使用 DetailView 的模板标签?或者用其他方法自动选择要在模板中显示的字段。
或者我应该自己在 get_context_data 中填一个表格?
DetailView
不适用于编辑。为此目的使用 UpdateView
。
如果您想以相同的格式循环显示每个字段,则必须在上下文中将您的字段名称作为列表传递,然后循环遍历此列表:
{% for field_name in field_names %}
<tr>
<th>{% get_field_label object field_name %}</th>
<td>{% get_field_value object field_name %}</td>
</tr>
{% endfor %}
并创建自定义模板标签:
@register.simple_tag
def get_field_label(obj, name):
return obj._meta.get_field(name).verbose_name
@register.simple_tag
def get_field_value(obj, name):
return getattr(obj, value)