【问题标题】:Django doesn't refresh my request object when reloading the current page重新加载当前页面时 Django 不刷新我的请求对象
【发布时间】:2011-02-25 15:40:37
【问题描述】:

我有一个 Django 网站,我希望它不能以不同的语言显示。直到今天早上一切正常。这是交易。我去我说关于我们的页面,它是英文的。在它下面是更改语言按钮,当我按下它时,所有东西都“神奇地”按照我想要的方式翻译成保加利亚语。另一方面,我有一个 JS 菜单,用户可以从中浏览产品。我单击“T 恤”,然后在先前按下的包含不同类别(男士、女士、儿童)下方打开一个子菜单。该链接将我引导到一个页面,其中列出了我要求的确切衣服。但是...当我尝试更改语言 THEN 时,什么也没有发生。我去 Abouts 页面,从那里更改语言,返回衣服目录并更改语言...

我不会粘贴一些代码。

这是我的更改按钮代码:

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)

让我解释一下,您不必对我发布的大量代码感到震惊。您不必了解它,甚至不必看全部。我发布它以防万一,因为我真的无法理解错误的起源。

现在这就是我缩小问题范围的方法。每次我想知道我的请求对象中的内容时,我都会使用“引发异常(请求)”进行调试。当我把它放在我的 aboutUs 方法中时,每次按下语言按钮时,语言 cookie 值都会发生变化。但不是当我使用 displayClothes 方法时。那里的语言保持不变。我还尝试将异常行放在 @base 方法的开头。事实证明那里的情况完全一样。当我在“关于我们”页面并单击按钮时,我的请求对象中的语言会发生变化,但是当我在目录页面中按下按钮时,它保持不变。

这就是我能找到的全部,我不知道 Django 如何区分我的页面以及以什么方式。

附:我认为 JavaScript 可以完美运行,我已经通过多种方式对其进行了测试。

谢谢,我希望你们中的一些人会阅读这篇庞大的帖子,并毫不犹豫地索取更多代码摘录。

【问题讨论】:

  • 您是否使用过 TamperData 之类的工具来确保浏览器发送的 HTTP 请求中的 cookie 正确无误?
  • 我不知道TamperData是什么,所以很有可能我没用过。

标签: javascript python django request refresh


【解决方案1】:

代码太多,无法通读。你真的需要努力减少它。

如果您确定错误在displayClothes 中的某个地方,那么我会注释掉一些位,直到您不再收到错误为止。但是那里似乎没有任何东西可以改变该视图中的 cookie,所以我不知道你会取得多大的成功。还要确保您检查的是 AboutUs 请求中的实际内容,而不仅仅是您认为的内容。

附注:您将 HTML 直接硬编码到您的视图中。我很确定您并不想这样做 - Django 有模板是有原因的。

【讨论】:

    猜你喜欢
    • 2020-04-03
    • 2016-11-21
    • 1970-01-01
    • 2017-09-20
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多