Django форма не отображает поля ввода в шаблоне - PullRequest
0 голосов
/ 19 сентября 2018

При создании формы, привязанной к модели в 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.as_p или просто форму).Я неправильно передаю форму в шаблон или сама форма неверна?

1 Ответ

0 голосов
/ 19 сентября 2018

Вы писали:

{<b>'form:'</b>: form}

обратите внимание на двоеточие (:), выделенное жирным шрифтом в ключе (двоеточие пишется дважды, один раз в ключе и один раз в качестве разделителя значения ключа).В результате вы передаете переменную с именем, в котором есть двоеточие.Изменение шаблона может помочь, но я бы настоятельно рекомендовал это сделать, поскольку такие символы обычно имеют особое значение для фильтров шаблонов и т. Д. Поэтому я бы посоветовал использовать только допустимые идентификаторы Python.

Поскольку имя переменной было form:, использование form в шаблоне не имело никакого смысла, поскольку - в соответствии с механизмом рендеринга Django - эта переменная не существует, поэтому она разрешает еес настройкой string_if_invalid движка рендеринга (по умолчанию пустая строка).

Должно быть:

def recipe_new(request):
    form = RecipeForm()
    return render(request, 'recipe_edit.html', <b>{'form': form}</b>)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...