【发布时间】:2019-01-20 14:43:59
【问题描述】:
早上好,我是 Django 新手,我正在尝试包含一个模板表单,但它不显示字段,只显示保存按钮。 使用 Django 2.1。我总结了代码,所以请你帮帮我。因为您需要在其他模板中重复使用该表单。
models.py
from django.db import models
class Area(models.Model):
nombre = models.CharField(max_length=45)
descripcion = models.CharField(max_length=100, null=True, blank=True)
def __str__(self):
return self.nombre
views.py
class AreaCreate(CreateView):
model = Area
form_class = AreaForm
template_name = 'area/area_form.html'
class AreaList(ListView):
model = Area
template_name = 'area/area_list.html'
forms.py
class AreaForm(forms.ModelForm):
class Meta:
model = Area
fields = (
'nombre',
'descripcion',
)
widgets = {
'nombre': forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Area'}),
'descripcion': forms.TextInput(attrs={'class': 'form-control', 'placeholder':'Descripción'}),
}
area_form.html
<form action="" method="POST"> {% csrf_token %}
<div class="form-row">
<div class="col-sm-4 campoform">
{{ form.nombre }}
</div>
<div class="col-sm-6 campoform">
{{ form.descripcion }}
</div>
<div class="col-sm-2 campoform">
<button class="btn btn-primary" type="submit" style="width:100%">Guardar</button>
</div>
</div>
</form>
area_list.html --- 为了更好地理解,我没有添加完整的 list.html 代码。
<div>{% include "area/area_form.html" %}</div>
area_list.html 中的结果是它只显示了按钮。
【问题讨论】:
-
为什么要这样?您已包含模板,但尚未将表单添加到上下文中。该表单仅由 AreaCreate 视图发送。
-
@Rildoy 这是一个基于类的视图,因此如果定义了 form_class,则该表单在模板中可用。我用我的一个 CreateViews 检查了所有内容,并显示了这些字段。那些自定义的 CSS 类呢?
-
感谢您的评论。在模板的 URL -area_form.html- 如果显示表单,问题是将其包含在另一个模板中,正如我所读到的,在使用 createview 时,不再需要使用上下文或 if ?.
-
@Rildoy ListView 不会显示您的表单,除非您将其添加到上下文中。例如,请参阅类似 stackoverflow.com/questions/18664182/… 的内容
-
非常感谢@Uroš Trstenjak。你的例子非常好。也感谢 DanielRoseman。
标签: django python-3.x django-forms django-templates django-views