在Django中创建绑定到模型的表单时,它根本不会呈现。
我有以下模型:
class Recipe(models.Model):
title = models.CharField(max_length=200)
text = models.TextField()
created_date = models.DateTimeField(
default=timezone.now)
url = models.TextField(validators=[URLValidator()], blank = True)
photo = models.ImageField(upload_to='photos', blank = True)
def publish(self):
self.created_date = timezone.now()
self.save()
def __str__(self):
return self.title
表格:
class RecipeForm(forms.ModelForm):
class Meta:
model = Recipe
fields = ['title', 'text']
视图:
def recipe_new(request):
form = RecipeForm()
return render(request, 'recipe_edit.html', {'form:': form})
模板:
{% extends 'base.html' %}
{% block content %}
<h1>New recipe</h1>
<form method="post" class="recipe-form">{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="save btn btn-default">Save</button>
</form>
{% endblock %}
但是仅显示标题“新配方”和“保存”按钮。如果我尝试在终端中打印form变量,它将正确打印出来。但是,对请求的响应始终没有输入字段(无论我使用form.as_p还是仅使用form)。我是将表单错误地传递到模板还是表单本身错了?
答案 0 :(得分:0)
您写道:
{'form:': form}
在键中以黑体显示冒号(:
)(您两次写冒号,一次在键中,一次作为键值分隔符)。结果,您传递的变量名称中带有冒号。更改模板可能帮助,但我强烈建议不要这样做,因为此类字符通常对模板过滤器等具有特定含义。因此,我建议仅使用有效的Python标识符。
由于变量的名称为form:
,因此在模板中使用form
毫无意义,因为-根据Django渲染引擎,该变量不会 存在,因此它使用渲染引擎的string_if_invalid
设置(默认为空字符串)来解决该问题。
应该是:
def recipe_new(request):
form = RecipeForm()
return render(request, 'recipe_edit.html', {'form': form})