М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет315/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   311   312   313   314   315   316   317   318   ...   334
Байланысты:
Изучаем Python

433
views.py
from django.shortcuts import render, redirect
from .models import Topic, Entry
from .forms import TopicForm, EntryForm
...
def edit_entry(request, entry_id):
"""Редактирует существующую запись."""

entry = Entry.objects.get(id=entry_id)
topic = entry.topic
if request.method != 'POST':
# Исходный запрос; форма заполняется данными текущей записи.

form = EntryForm(instance=entry)
else:
# Отправка данных POST; обработать данные.

form = EntryForm(instance=entry, data=request.POST)
if form.is_valid():

form.save()

return redirect('learning_logs:topic', topic_id=topic.id)
context = {'entry': entry, 'topic': topic, 'form': form}
return render(request, 'learning_logs/edit_entry.html', context)
Сначала необходимо импортировать модель 
Entry
. В точке 

мы получаем объект 
записи, который пользователь хочет изменить, и тему, связанную с этой записью. 
В блоке 
if
, который выполняется для запроса GET, создается экземпляр 
EntryForm
с аргументом 
instance=entry

. Этот аргумент приказывает Django создать форму, 
заранее заполненную информацией из существующего объекта записи. Пользова-
тель видит свои существующие данные и может отредактировать их.
При обработке запроса POST передаются аргументы 
i n s t a n c e = e n t r y
и 
data=request.POST

. Они приказывают Django создать экземпляр формы на 
основании информации существующего объекта записи, обновленный данными 
из 
request.POST
. Затем проверяется корректность данных формы. Если данные 
корректны, следует вызов 
save()
без аргументов 

. Далее происходит перена-
правление на страницу темы 

, и пользователь видит обновленную версию от-
редактированной им записи.
Если отображается исходная форма для редактирования записи или если отправ-
ленная форма недействительна, создается словарь 
context
, а страница строится на 
базе шаблона 
edit_entry .html
.
Шаблон edit_entry
Шаблон 
edit_entry .html
очень похож на 
new_entry .html
:
edit_entry.html
{% extends "learning_logs/base.html" %}
{% block content %}


434

Достарыңызбен бөлісу:
1   ...   311   312   313   314   315   316   317   318   ...   334




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет