Django中无法获取JavaScript cookie值

5 投票
1 回答
4207 浏览
提问于 2025-04-15 23:17

我正在使用Django框架构建一个支持英语和保加利亚语的网站。我的想法是用户点击一个按钮后,页面会重新加载并切换语言。以下是我尝试的方式:

在我的HTML中,我有一个按钮标签 <button id='btn' onclick="changeLanguage();" type="button"> ... </button>

这是我在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;
}

在我的views.py文件中,情况是这样的:

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

我知道我的JavaScript代码更改了语言cookie的值,但我觉得Django没有接收到这个变化。另一方面,当我在Python代码中设置和获取cookie时,cookie又被设置了。我的问题是,是否有办法让JavaScript和Django一起工作——也就是说,JavaScript设置cookie的值,而Python只在需要时读取这个值并采取相应的行动?

谢谢。

1 个回答

10

会话和cookie是两回事。

会话是Django内部用来存储数据的一个数据库表,存储在这个表里的数据是通过一个cookie的键来访问的。不过,除了这个键以外的其他数据都是存放在数据库里的。

如果你想访问客户端设置的实际cookie,你需要使用 request.COOKIES 这个字典:

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

撰写回答