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 есть ссылка на страницу "Добавить публикацию". Как попытаться сделать тоже самое, если пользователь нажал на эту ссылку, находясь на странице "Добавить публикацию" и игнорить этот кейс в противном случае?
  • Вопрос задан
  • 115 просмотров
Пригласить эксперта
Ответы на вопрос 2
@bacon
Это не про django, а про знание как работает http, при F5 такой же GET запрос как и при получении данной страницы, конечно при этом введенные данные не сохранятся, но если очень надо, то можно сохранять с помощью js, но это тоже не имеет к django никакого отношения.
ЗЫ Задавайте по одному вопросу. Ну и код views очень плохой, не использует очень многого из django
Ответ написан
ArsenyMatytsyn
@ArsenyMatytsyn
CEO iAmStudio, предприниматель.
Чтобы сохранять данные в сессии, в том числе введенные в поля ввода, необходимо JS и sessionStorage\localStorage\кукисы и (что важно) их желательно очищать при успешной отправке формы, ибо на следующей словишь те же данные.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы