Django表单未在模板中呈现输入字段

时间:2018-09-19 07:20:19

标签: django django-models django-forms

在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)。我是将表单错误地传递到模板还是表单本身错了?

1 个答案:

答案 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})