2017-01-12 5 views
0

Ich habe eine Seite in Django/Django-CMS, in der ich Daten von einer Seite zur anderen speichern möchte. Ich rette die Daten in dem session Variable:Django/Django-CMS Sitzungsvariablen mit alten Werten

request.session['yb_name'] = request.POST.get('name') 

Das Problem ist, dass manchmal meine Seiten bekommen und alter Wert von yb_name anstelle der neuen. Ich drucke die Variable in meinem Kontext-Prozessor und der Wert ist der richtige aber in der Vorlage zeigt mir und alten. Dies passiert nicht jedes Mal. Auch das passiert in Vorlagen von benutzerdefinierten Plugins, die ich gemacht habe.

Ich drucke es in der Vorlage wie folgt aus:

<input type="text" name="name" value="{{ request.session.yb_name|default_if_none:'' }}"> 

Das erste, was ich war versucht, die Variable zu löschen und erstellen Sie dann erneut den neuen Wert:

if request.session.get('yb_name', None): 
    del request.session['yb_name'] 
request.session.modified = True 
request.session['yb_name'] = request.POST.get('name') 
request.session.modified = True 

Aber die Problem besteht weiter.

Irgendwelche ideia, was ich sein könnte?

Thanks :)

+0

Warum verwenden Sie request.POST? Navigation überspringen in der Regel eine mit GET-Anfragen ... –

+0

Hallo Patricia, versuchen Sie den cms-Cache auszuschalten. – Paulo

+0

@Paulo Vielen Dank, das hat mein Problem gelöst. – patricia

Antwort

0

Wie @Paulo vorgeschlagen drehte ich die CMS-Cache ab. In meiner settings.py Datei hinzugefügt ich diese Zeilen:

CMS_PAGE_CACHE = False 
CMS_PLACEHOLDER_CACHE = False 
CMS_PLUGIN_CACHE = False 

Dieser alle Cache deaktiviert, aber wie durch @brunodesthuilliers vorgeschlagen könnte es in der Produktion schlecht sein, so suchte ich ein wenig in der Django-CMS Dokumentation und finden kann eine Einstellung, die Sie deaktivieren setzen nur einige Plugins:

class HistoryHeaderCMSPlugin(CMSPluginBase): 
    render_template = "plugins/history/header.html" 
    name = _("History Header") 
    model = HistoryHeaderPlugin 
    cache = False 

    def render(self, context, instance, placeholder): 
     context = super(HistoryHeaderCMSPlugin, self).render(context, instance, placeholder) 
     return context 

die cache = False in den Plugins, die meine Sitzungen Variablen verwendet mein Problem gelöst, ohne alle CMS Cache zu verlieren.

Vielen Dank alle :)

+0

Dies kann _seem_ Ihr Problem jetzt lösen, aber dies wird ein weiteres Problem, sobald Sie auf bereitstellen Produktion und beginnen, etwas ernsthaften Verkehr zu bekommen. Es gibt einen Grund, warum django-cms Caching verwendet ... –

+0

@brunodesthuilliers hast du andere Lösung? – patricia

+0

@brunodesthuilliers und ich verwende 'POST', weil es von einem Formular gesendet wird. – patricia