Django не обновляет мой объект запроса при перезагрузке текущей страницы - PullRequest
2 голосов
/ 30 мая 2010

У меня есть веб-сайт Django, который я не хочу просматривать на разных языках. До этого утра все работало нормально. Вот сделка. Я захожу на мою страницу «О нас», и она на английском языке. Под ней находится кнопка смены языка, и когда я нажимаю на нее, все «волшебным образом» переводится на болгарский язык так, как я этого хочу. С другой стороны, у меня есть меню JS, из которого пользователь может просматривать продукты. Я нажимаю на «Футболку», после чего открывается подменю под ранее нажатой, содержащее различные категории - Мужчины, Женщины, Дети. Ссылка ведет меня на страницу, где указана точная одежда, которую я запрашивал. НО ... Когда я пытаюсь изменить язык ТО, ничего не происходит. Я захожу на страницу Abouts, меняю там язык, возвращаюсь в каталог одежды и язык меняется ...

Я не буду вставлять код.

Это мой код кнопки изменения:

function changeLanguage() {
    if (getCookie('language') == 'EN') {
        setCookie("language", 'BG');
    } else {
        setCookie("language", 'EN');
    }
    window.location.reload();
}

Страница My About Us:

@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. Оказывается, ситуация там точно такая же. Когда я нахожусь на своей странице «О нас» и нажимаю на кнопку, язык в моем объекте запроса изменяется, но когда я нажимаю кнопку на странице каталога, он остается неизменным.

Это все, что я мог найти, и я понятия не имею, как Джанго отличает мои страницы и каким образом.

P.S. Я думаю, что JavaScript работает отлично, я тестировал его несколькими способами.

Спасибо, я надеюсь, что некоторые из вас прочитают этот огромный пост, и не стесняйтесь спрашивать больше выдержек из кода.

1 Ответ

1 голос
/ 31 мая 2010

Это слишком много кода для прочтения. Вам действительно нужно приложить усилия, чтобы урезать его.

Если вы уверены , что ошибка где-то в displayClothes, то я бы закомментировал биты, пока вы больше не получите ошибку. Но там, похоже, нет ничего, что изменило бы куки в этом представлении, поэтому я не знаю, насколько успешно вы будете. Также убедитесь, что вы проверяете, что на самом деле содержится в запросе AboutUs, а не только то, что вы думаете .

Примечание: вы жестко программируете HTML прямо в своих представлениях. Я почти уверен, что вы не хотите этого делать - у Джанго есть причины по какой-то причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...