Как изменить URL с помощью django process_request. - PullRequest
7 голосов
/ 16 июня 2011

Это мой код:

class MobileMiddleware(object):

    def process_request(self, request):
        if request.path.startswith('/core/mypage/'):
            request.path='/core/mypage/?key=value'
            print request.path,'aaaa'

Я хочу добавить параметр key, когда URL страницы равен /core/mypage/,

и URL веб-браузера будет изменен на http:www.ss.com/core/mypage/?key=value

Однако URL в браузере не изменяется.

Что я могу сделать?

Ответы [ 5 ]

12 голосов
/ 07 июня 2013

Для googlers - я тестировал с request.path_info.Если вы хотите изменить URL в промежуточном программном обеспечении, измените request.path_info в process_request .

request.path_info = <change request.path_info>

Обратите внимание, что я не предлагаю или запрещаю использовать это.Я просто говорю, что если вы хотите изменить URL-адрес, это то, что вы можете.

3 голосов
/ 16 июня 2011

Проблема в том, что HttpRequest.path является простым атрибутом. Изменение его не делает никаких новых инструкций для браузера. Вы, вероятно, ищете метод redirect , который фактически заставит браузер перейти в другое место.

1 голос
/ 24 декабря 2014

request.path_info не изменил URL-адрес в адресной строке браузера для меня, но это перенаправление сделало:

from django.shortcuts import redirect


class DomainRedirectMiddleware(object):

    def process_request(self, request):

        if request.path.startswith('/core/mypage/') and not request.GET:
            return redirect('/core/mypage/?key=value')  # works!
            #request.path_info = '/core/mypage/?key=value'  # works, but does not change url in browser address bar

Django также предоставляет «Приложение перенаправления» начиная с Django 1.3, которое включает в себя следующее промежуточное ПО: 'django.contrib.redirects.middleware.RedirectFallbackMiddleware'.См. документацию по перенаправлению приложения , она позволяет создавать перенаправления из интерфейса администратора.

Я попробовал тот же редирект с помощью приложения, и это сработало.Ура!

1 голос
/ 16 июня 2011

Попробуйте

1002 *
0 голосов
/ 16 июня 2011

Я не проверял это, но попробуйте что-то вроде request.GET["key"] = val

Редактировать: или, возможно, использовать request.path_info вместо request.path

...