Задать вопрос
exibite777
@exibite777
Ведущий системный аналитик

Django. Как сохранить поля формы при перезагрузке страницы?

Как восстановить поля формы в случае перезагрузки экранной формы пользователем (через F5 или по кнопке браузера)
Собственно вот пример, того что я делаю. Это некий условный блог
Код функции из views.py
def post(request):
    if request.method=="POST":
        title = request.POST.get("title")
        text = request.POST.get("text")
        author = request.POST.get("author")
        if title and text and author:
            setpub(title=title,
                date=datetime.now().strftime("%d.%m.%Y %H:%M:%S"),
                author=author,
                text=text)
            return redirect("/mytestblog/publication/")
        else:
            msg={"error1":"Необходимо указать заголовок и текст публикации",
                "error2":"Необходимо указать автора публикации",
                "title": title,
                "author": author,
                "datetime":datetime.now().strftime("%d.%m.%Y %H:%M:%S"),
                "text": text}
            if title and text:
                del msg["error1"]
            if author:
                del msg["error2"]
            return render(request, 'post.html', 
                          msg)
    return render(request, 'post.html', {
        "datetime":datetime.now().strftime("%d.%m.%Y %H:%M:%S")
        })
Код шаблона
{% extends "base.html" %}

{% block title %}Добавить публикацию{% endblock %}
{% block сontent %}
    <h1>Добавить новую публикацию</h1>   
    
    <p><b><font color="red">{{ error1 }}</font></b></p>
    <form action="/mytestblog/post/" method="post">
        {% csrf_token %}
        <input style="width: 50%" type="text" name="title" value="{{ title }}" placeholder="Название публикации"/><br /><br />
        <textarea style="width: 50%; height: 200px; resize: none"
    name="text" placeholder="Текст публикации">{{ text }}</textarea><br />
        <p><b><font color="red">{{ error2 }}</font></b></p>
        <input style="width: 20%" type="text" name="author" value="{{ author }}" placeholder="Автор публикации"/><br />
        <p>{{ datetime }}</p>
        <button>Опубликовать</button><br />
    </form>
{% endblock %}

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

Вопрос №2. Со звездочкой. В base.html есть ссылка на страницу "Добавить публикацию". Как попытаться сделать тоже самое, если пользователь нажал на эту ссылку, находясь на странице "Добавить публикацию" и игнорить этот кейс в противном случае?
  • Вопрос задан
  • 1248 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 1
ArsenyMatytsyn
@ArsenyMatytsyn
Руководитель frontend направления, предприниматель
Чтобы сохранять данные в сессии, в том числе введенные в поля ввода, необходимо JS и sessionStorage\localStorage\кукисы и (что важно) их желательно очищать при успешной отправке формы, ибо на следующей словишь те же данные.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы