Как удалить переменную сессии после использования в шаблонах Django - PullRequest
1 голос
/ 02 июня 2019
def demo(request):
    if data:
        request.session['success'] = "Success'
    else:
        request.session['failed'] = "Failed'

Здесь я определил один метод, и в этом случае, если я получил данные, то успешный сеанс сохраняется, а другой - неудачный.

После этого я перенаправляю пользователя на другую страницу, и там я показываю эту переменную сеанса в шаблоне.

Но после отображения этого состояния сеанса я хочу удалить эту переменную сеанса. Потому что я хочу отображать это сообщение только один раз для пользователя. Если пользователь обновляет страницу, эту переменную следует удалить .

Я пытался найти в Интернете, но не получил никакой помощи. Поэтому, пожалуйста, помогите мне с этим.

Спасибо

P.S .: Я перенаправляю пользователя на другую страницу, используя return redirect('page'). Рендеринг другого шаблона с использованием return render(request, "my_tmp.html") не работает, потому что он будет загружать шаблон только в текущем URL (URL не изменится, будет работать только контент). Так что я не хочу этого. Я знаю, что могу использовать этот способ, передавая переменную сеанса в контексте, но это не то, что я хочу.

Я использую Django 2

1 Ответ

2 голосов
/ 02 июня 2019

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

У Django есть инструменты для показа сообщений пользователю: сообщенийрамки [Джанго-док] .В документации указано, как вы можете настроить эту платформу, хотя по умолчанию она уже установлена ​​(поэтому, если вы ее не удалили, вам не нужно ничего делать).

По вашему мнению, вы можетезатем добавьте сообщения, например:

from django.contrib import <b>messages</b>

def demo(request):
    if data:
        <b>messages.success</b>(request, 'Operation successful')
    else:
        <b>messages.error</b>(request, 'Operation failed!')
    return render(request, 'some_template.html', {})

В своем шаблоне вы можете затем отобразить сообщения, как указано в документации [Django-doc] :

{% if <b>messages</b> %}
<ul class="messages">
    {% for message in <b>messages</b> %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

Например, вы можете включить это в ваш base.html (и, следовательно, расширить все другие страницы из этого супер-шаблона), чтобы вы отображали сообщения на всех страницах.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...