2015-05-17 3 views
0

У меня есть фрагмент кода, который устанавливает атрибут запроса, когда пользователь посещает мой поддомен android (показано ниже как часть home.devices.py. Затем он подбирается в base.html и используется для включения моего android-navbar.html.Это отлично работает на всех мои страницы для logout.html исключения. Это тот случай, или нет регистрируется пользователь в.Почему мое промежуточное ПО не устанавливает атрибуты запроса при выходе из системы?

Как вы можете видеть в шаблоне фрагменте из base.html ниже Я вывода значения UA и субдомны на страницу и это работает правильно для всех других страниц, но ничего не возвращает на странице выхода.

Я также проверил, добавив assert False, который срабатывает, если мой атрибут request.subdomain не установлен в android. Это не срабатывает, хотя, так ясно, что промежуточное ПО работает, но поддомены и переменные UA не доступны из моей страницы выхода.

Почему это происходит и как я могу это исправить?

Возможно соответствующие биты кода:

app.views

def logout(request): 
    auth.logout(request) 
    if not request.subdomain == 'android': 
     assert False 
    return render_to_response('registration/logout.html') 

app.settings

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'home.device.MobileMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

шаблон base.html сниппет

... 
    {% if request.subdomain == 'android' %} 
     {% include 'home/android-navbar.html' %} 
    {% else %}  
     {% include 'home/navbar.html' %} 
    {% endif %} 
    {% endblock %} 
    </div> 
    <div>UA is: {{ request.ua_full }}</div> 
    <div>Subdomain is: {{ request.subdomain }}</div> 
    .... 

home.devices. py

# list of mobile User Agents 
mobile_uas = [ 
    'w3c ','acs-','alav','alca','amoi','audi','avan','benq','bird','blac', 
    'blaz','brew','cell','cldc','cmd-','dang','doco','eric','hipt','inno', 
    'ipaq','java','jigs','kddi','keji','leno','lg-c','lg-d','lg-g','lge-', 
    'maui','maxo','midp','mits','mmef','mobi','mot-','moto','mwbp','nec-', 
    'newt','noki','oper','palm','pana','pant','phil','play','port','prox', 
    'qwap','sage','sams','sany','sch-','sec-','send','seri','sgh-','shar', 
    'sie-','siem','smal','smar','sony','sph-','symb','t-mo','teli','tim-', 
    'tosh','tsm-','upg1','upsi','vk-v','voda','wap-','wapa','wapi','wapp', 
    'wapr','webc','winw','winw','xda','xda-' 
    ] 

mobile_ua_hints = [ 'SymbianOS', 'Opera Mini', 'iPhone', 'Mobile Safari' ] 


def is_mobile(request): 
    ''' Super simple device detection, returns True for mobile devices ''' 

    mobile_browser = False 
    ua = request.META['HTTP_USER_AGENT'].lower()[0:4] 
    ua_full = request.META['HTTP_USER_AGENT'] 
    if (ua in mobile_uas): 
     mobile_browser = True 
    else: 
     for hint in mobile_ua_hints: 
      if request.META['HTTP_USER_AGENT'].find(hint) > 0: 
       mobile_browser = True 

    return mobile_browser 


def get_ua(request): 
    ''' Return the name of the user agent ''' 
    ua_full = request.META['HTTP_USER_AGENT'] 

    return ua_full 


def get_subdomain(request): 
    subdomain = request.META['HTTP_HOST'].split('.')[0] 
    return subdomain 


class MobileMiddleware(object): 

    def __init__(self):  
     pass 

    def process_request(self, request): 
     request.mobile = is_mobile(request) 
     request.ua_full = get_ua(request) 
     request.subdomain = get_subdomain(request) 
     return 

ответ

1

Вы не используете RequestContext при визуализации шаблона, поэтому переменная запроса отсутствует. Вместо этого используйте ярлык render.

return render(request, 'registration/logout.html') 

 Смежные вопросы

  • Нет связанных вопросов^_^