Джанго переменного контекста по умолчанию

Вопрос задан: 9 месяцев назад Последняя активность: 9 месяцев назад
up 1 down

Я новичок в Django веб-разработчика, удалось установить игрушечный проект следующим этот учебник.

Тем не менее я нашел официальную документацию Django, а также этот учебник довольно запутанный, мне трудно следовать, особенно контекстному переменному шаблон.

К примеру, в xxapp/views.py мы определили несколько их следующим образом,

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy

from catalog.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = '__all__'
    initial = {'date_of_death': '05/01/2018'}

class AuthorUpdate(UpdateView):
    model = Author
    fields = ['first_name', 'last_name', 'date_of_birth', 'date_of_death']

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('authors')

Тогда в шаблонах, у нас есть это

{% extends "base_generic.html" %}

{% block content %}
  <form action="" method="post">
    {% csrf_token %}
    <table>
    {{ form.as_table }} <!-- WHERE IS THIS "FORM" FROM? -->
    </table>
    <input type="submit" value="Submit">
  </form>
{% endblock %}

Я понимаю этот файл шаблона, за исключением одной вещи, где есть form.as_table от, и что это ??

Я понимаю, что, если мы будем использовать некоторые встроенные в представлениях класса или моделей, мы могли бы иметь некоторые данные контекста бесплатно, но где я подстановок их, я искал на Django, но ничего не нашел.

2 ответа

Возможно, для Вашего проекта будут необходимы бесплатные векторные карты. На нашем сайте представлены карты для всех стран.

Реклама

up 2 down accepted

Вы используете общие взгляды, основанные на классы, которые приходят с большим количеством функциональных возможностей, запеченными в. Лучший источник, чтобы посмотреть их в этот.

Если вы посмотрите на CreateView например (Edit -> CreateView), вы увидите, что get() метод, который является первым методом, который называется, когда вы просто извлечь страницу с помощью GET, только звонки render_to_response() с контекстными данные получены с get_context_data().

А внутри get_context_data(), мы добавим form контекст переменной в контексте, который присваивается get_form(). так далее...

То же самое с post() метод, в котором сначала form забирается, проверяются на достоверность, и если не действительным, form_invalid() способ делает шаблон с form в его контексте.

Вы можете следить за то же самое с UpdateView а также DeleteView, Они очень похожи. Большая часть кода обработки формы на самом деле происходит от FormMixin класс.

При создании собственных взглядов, подклассы общих взглядов Django, вы обнаружите, что иногда вы не можете использовать вид, но вы можете использовать Примеси (например, FormMixin или же ModelFormMixin).

Так form в шаблоне является ModelForm для Author модели, указанные в ваших общих взглядах. Мнение автоматическое генерирование, что форма из модели с использованием modelform_factory, С полями, которые вы указали при fields. Так как он добавляется в 'form' ключ к контексту используется для отображения шаблона, вы можете получить к нему доступ {{ form }}. {{ form.as_table }} будет оказывать HTML для этой формы в <table>, как описано вот.

Если вам не нравится, как форма выглядит как и вы хотите настроить некоторые поля (и не может сделать это, просто изменив шаблон), вы должны создать свою собственную форму, скажите Ваше мнение об этом, установив form_class атрибутов и удаление fields атрибут (поля будут указаны в вашей форме), как описано @drew в своем ответе.

up 2 down

"«Форма» является переменной вам необходимо перейти от вашей точки зрения на шаблон.

Вы должны создать forms.py файл, чтобы установить все ваши формы.

В этом файле вы можете создать простую форму, например так:

from django import forms

class NameForm(forms.Form):
    your_name = forms.CharField(label='Your name', max_length=100)

И тогда, по вашему мнению, вы должны импортировать форму, а затем установите «форму» переменную как таковой:

form = NameForm()

Или, если вы выложили данные:

form = NameForm(request.POST)

Поэтому, как только вы прошли эту переменную шаблона, можно либо вызвать всю форму, как вы используете «form.as_table»

Или вы можете вызвать отдельные поля формы, такие как:

{{ form.your_name.label }}
{{ form.your_name }}
{{ form.your_name.errors }}

Смотрите эту помощь документ на сайте Django для получения дополнительной информации: https://docs.djangoproject.com/en/2.1/topics/forms/#the-form-class