Как удалить переменную сеанса в шаблоне после того, как его работа сделана в Django

У меня есть приложение под названием dashboard где я перенаправляю всех зарегистрированных пользователей с возможностью добавления статей пользователем.

После того, как пользователь нажимает кнопку "Отправить" в форме, данные отправляются /dashboard/article/save URL через POST и после сохранения данных, представление возвращается HttpResponseRedirect в show_dashboard который оказывает dashboard.html с переменной сеанса result,

В файле шаблона панели инструментов я добавил код notify.js для отображения подтверждений пользователю. Проблема в том, что если этот сеанс var определен, каждый раз, когда отображается страница панели мониторинга, уведомление запускается ДАЖЕ, если пользователь не добавил статью.

(Я новичок в использовании веб-фреймворков, поэтому я не знаю, как все это работает должным образом)

Некоторый код:

Приборная панель / models.py:

class Article(models.Model):

    id = models.IntegerField(primary_key=True)
    ar_title = models.CharField(max_length=25)
    ar_data = models.CharField(max_length=500)
    user = models.ForeignKey(User,on_delete=models.CASCADE)

    def getArticleTitle(self):
        return self.title

    def getArticleData(self):
        return self.title

    def getArticleAuthor(self):
        return self.user

Приборная панель / urls.py:

urlpatterns = [
    url(r'^$', views.show_dashboard,name='home_dashboard'),
    url(r'^profile/save/', views.save_profile,name="save_profile"),
    url(r'^newsfeed/', views.get_newsfeed,name="newsfeed",),
    url(r'^profile/', views.show_profile,name="show_profile"),
    url(r'^article/save/', views.add_new_article,name="add_new_article"),
]

Приборная панель / views.py:

@login_required
def show_dashboard(request):
    return render(request,'dashboard/dashboard.html',{'form':NewArticleForm()})

def add_new_article(request):
    if(request.method == 'POST'):
        ar_title= request.POST['ar_title']
        ar_data = request.POST['ar_data']
        user = request.user
        form = NewArticleForm(request.POST)
        if(form.is_valid()):
            Article.objects.create(ar_title=ar_title,ar_data=ar_data,user=user)
            request.session["result"] = "add_article_OK"
            return HttpResponseRedirect(reverse('home_dashboard'))

dashboard.html:

{% ifequal request.session.result 'add_article_OK' %}
    <script>
        $.notify("New article added successfully", 
            {position:"bottom right","className":"success","autoHide":"yes","autoHideDelay":"3000"});
    </script>
{% endifequal %}

Теперь, как мне удалить это значение сеанса после того, как оно отобразило сообщение? я знаю del request.session['result'] может быть выдан, но где я могу положить его в этой иерархии ходов?

1 ответ

Решение

Сделай это в show_dashboard Посмотреть.

Вместо того, чтобы получать значение из сеанса в шаблоне, вставьте его в представление и передайте его в шаблон; таким образом вы позаботитесь о том, чтобы получить и очистить его за один раз.

@login_required
def show_dashboard(request):
    context = {
        'form': NewArticleForm(),
        'result': request.session.pop('result', None)
    }
    return render(request,'dashboard/dashboard.html',context)

...
{% ifequal result 'add_article_OK' %}
Другие вопросы по тегам