5

I am trying to build a web site in both English and Bulgarian using the Django framework. My idea is the user should click on a button, the page will reload and the language will be changed. This is how I am trying to do it:

In my html I hava a the button tag <button id='btn' onclick="changeLanguage();" type="button"> ... </button>

An excerpt from 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;
}

And in my views.py file this is the situation

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

So I know that my JS changes the value of the language cookie but I think Django doesn't get that. On the other hand when I set and get the cookie in my Python code again the cookie is set. My question is whether there is a way to make JS and Django work together - JavaScript sets the cookie value and Python only reads it when asked and takes adequate actions?

Thank you.

1 Answer 1

10

The session is not the same as a cookie.

Sessions are an internal Django database table, the key to which is stored in a cookie. However the rest of the data apart from the key is stored in the database.

If you want to access an actual cookie that's been set by the client, you need to use the request.COOKIES dictionary:

if request.COOKIES['language'] == 'EN':
    return """<b>%s</b>""" % "Home" 
2
  • Thank you very much :). This is EXACTLY what I needed, and a just-in-time-reply too. P.S. I asked my roomy that question, almost sure he wouldn't have the answer, but he explained it to me. I had already posted the question in SO so he hurried up to his PC to answer the question in order to gain favour :D. But you beat him to it with only one second :D. Commented May 28, 2010 at 18:15
  • Is using cookies any less secure than using Django's contrib middleware and sessions combination? I find cookies much easier to grasp and understand, and I feel by storing in internal database, and validating them against incoming requests, I have much finer grained control over user authentication... Commented Jul 17, 2016 at 15:40

Not the answer you're looking for? Browse other questions tagged or ask your own question.