2010-05-28 5 views
3

J'essaye de construire un site web en anglais et en bulgare en utilisant le framework Django. Mon idée est que l'utilisateur doit cliquer sur un bouton, la page se rechargera et la langue sera changée. Voilà comment je suis en train de le faire:La valeur du cookie JavaScript ne peut pas être récupérée dans Django

Dans mon html je Hava une étiquette sur le bouton <button id='btn' onclick="changeLanguage();" type="button"> ... </button>

Un extrait de cookies.js:

function changeLanguage() { 
    if (getCookie('language') == 'EN') { 
     document.getElementById('btn').innerHTML = getCookie('language'); 
     setCookie("language", 'BG'); 
    } else { 
     document.getElementById('btn').innerHTML = getCookie('language'); 
     setCookie("language", 'EN'); 
    } 
} 

function setCookie(sName, sValue, oExpires, sPath, sDomain, bSecure) { 
    var sCookie = sName + "=" + encodeURIComponent(sValue); 
    if (oExpires) { 
     sCookie += "; expires=" + oExpires.toGMTString(); 
    } 
    if (sPath) { 
     sCookie += "; path=" + sPath; 
    } 
    if (sDomain) { 
     sCookie += "; domain=" + sDomain; 
    } 
    if (bSecure) { 
     sCookie += "; secure"; 
    } 
    document.cookie = sCookie; 
} 

Et dans mon dossier views.py cette est la situation

@base 
def index(request): 
    if request.session['language'] == 'EN': 
     return """<b>%s</b>""" % "Home" 
    else request.session['language'] == 'BG': 
     return """<b>%s</b>""" % "Начало" 

Je sais que mon JS change la valeur du cookie de la langue, mais je pense que Django ne soit pas ça. D'un autre côté, quand je mets et récupère le cookie dans mon code Python, le cookie est activé. Ma question est de savoir s'il existe un moyen de faire fonctionner JS et Django - JavaScript définit la valeur du cookie et Python ne le lit que lorsqu'il est demandé et prend les mesures adéquates.

Merci.

Répondre

8

La session est différente d'un cookie.

Les sessions sont une table de base de données Django interne, dont la clé est stockée dans un cookie. Cependant le reste des données en dehors de la clé est stocké dans la base de données.

Si vous souhaitez accéder à un cookie réel qui a été fixé par le client, vous devez utiliser le dictionnaire request.COOKIES:

if request.COOKIES['language'] == 'EN': 
    return """<b>%s</b>""" % "Home" 
+0

Merci beaucoup :). C'est exactement ce dont j'avais besoin, et une réponse juste-à-temps aussi. P.S. J'ai posé cette question à mon interlocuteur, presque sûr qu'il n'aurait pas la réponse, mais il m'a expliqué. J'avais déjà posté la question dans SO, alors il s'est dépêché à son PC pour répondre à la question afin d'obtenir la faveur: D. Mais vous l'avez battu avec seulement une seconde: D. –

+0

L'utilisation de cookies est-elle moins sûre que l'utilisation de la combinaison middleware et sessions de Django? Je trouve les cookies beaucoup plus faciles à saisir et à comprendre, et je me sens en stockant dans la base de données interne, et en les validant contre les requêtes entrantes, j'ai un contrôle beaucoup plus fin sur l'authentification de l'utilisateur ... – SexyBeast

Questions connexes