Django刷新当前页面时不会更新请求对象
我有一个Django网站,想让它支持多种语言。直到今天早上,一切都运作得很好。事情是这样的:我打开“关于我们”页面,看到的是英文。下面有一个切换语言的按钮,按下去后,所有内容“神奇地”变成了保加利亚语,正是我想要的。不过,我还有一个JavaScript菜单,用户可以通过它浏览产品。我点击了“T恤”,然后下面会弹出一个子菜单,里面有不同的分类——男士、女士、儿童。这个链接会带我到一个页面,列出我想要的衣服。但是……当我试图在这个时候切换语言时,什么都没有发生。我回到“关于我们”页面,从那里切换语言,再返回衣服目录,语言就变了……
我接下来会贴一些代码。
这是我的切换按钮代码:
function changeLanguage() {
if (getCookie('language') == 'EN') {
setCookie("language", 'BG');
} else {
setCookie("language", 'EN');
}
window.location.reload();
}
我的“关于我们”页面:
@base
def aboutUs(request):
return """<b>%s</b>""" % getTranslation("About Us Text", request.COOKIES['language'])
还有@base方法:
def base(myfunc):
def inner_func(*args, **kwargs):
try:
args[0].COOKIES['language']
except:
args[0].COOKIES['language'] = 'BG'
# raise Exception(request)
# if I am in the AboutUs page
# and I click on the language change button
# the cookie value in the request object changes
# if however I am in the displayClothes page
# the value stays the same
# some code I removed
contents = myfunc(*args, **kwargs)
return render_to_response('index.html', {'title': title, 'categoriesByCollection': categoriesByCollection.iteritems(), 'keys': enumerate(keys), 'values': enumerate(values), 'contents': contents, 'btnHome':getTranslation("Home Button", args[0].COOKIES['language']), 'btnProducts':getTranslation("Products Button", args[0].COOKIES['language']), 'btnOrders':getTranslation("Orders Button", args[0].COOKIES['language']), 'btnAboutUs':getTranslation("About Us Button", args[0].COOKIES['language']), 'btnContacts':getTranslation("Contact Us Button", args[0].COOKIES['language']), 'btnChangeLanguage':getTranslation("Button Change Language", args[0].COOKIES['language'])})
return inner_func
以及目录页面:
@base
def displayClothes(request, category, collection, page):
clothesToDisplay = getClothesFromCollectionAndCategory(request, category, collection)
contents = ""
# some code I removed
return """%s""" % (contents)
让我解释一下,你不需要对我发布的大量代码感到惊慌。你不必理解它,甚至不需要看完所有的代码。我发布这些只是为了以防万一,因为我真的搞不清楚这个bug的来源。
现在,我已经缩小了问题的范围。我在每次想知道请求对象里面有什么时,都会用“raise Exception(request)”来调试。当我把这个放在我的aboutUs方法里时,每次按下语言按钮,语言的cookie值都会改变。但在displayClothes方法里就不一样了,语言保持不变。我还尝试把异常行放在@base方法的开头,结果发现情况也是一样的。当我在“关于我们”页面点击按钮时,请求对象里的语言会改变,但在目录页面按下按钮时,它却保持不变。
这就是我能找到的全部信息,我不知道Django是如何区分我的页面的,也不知道具体是怎样的。
附言:我觉得JavaScript运行得很好,我已经用多种方式测试过了。
谢谢你们,希望你们能读完这篇长长的帖子,如果需要更多代码片段,请随时问我。
1 个回答
这段代码太多了,读起来很费劲。你真的需要努力把它简化一下。
如果你确定错误出现在displayClothes
里,那你可以逐步注释掉一些代码,直到不再出现错误为止。不过在这段代码里似乎没有什么会改变这个视图中的cookies,所以我不太确定这样做能否成功。另外,确保你检查的是请求中实际包含的内容,而不是你认为的内容。
顺便提一下:你把HTML直接写进视图里了。我觉得你可能不想这样做——Django有模板的原因就是为了避免这种情况。