Bob's Blog

Web开发、测试框架、自动化平台、APP开发、机器学习等

返回上页首页

Django里根据不同设备展示不同内容



现在访问网页除了pc端,手机端也是经常使用的类型。

那么会有个需求,在pc端和mobile端展示不同的内容,毕竟pc浏览器里的布局显示不一定适合在手机浏览器上。

一般会有两种方式:

 1. 响应式布局。比如bootstrap也有相关定义。通过查询媒介,针对不同的屏幕宽度来设置对应的css样式,可以实现在不同设备上对同一控件展示成不同的外观效果。

          在html的head中首先定义:         

<meta name="viewport" content="width=device-width, initial-scale=1.0">

          在css定义中可以指明不同的宽度使用什么样式属性(从网上复制了下面的样例,因为自己没有使用这种方式):

/width < 768px*/
@media screen and (max-width: 768px){
    .container{
        width:100%;
        background-color: green;
    }
}
/width >= 768 and width < 992*/
@media screen and (max-width: 992px) and (min-width: 768px) {
    .container{
        width:750px;
        background-color: blue;
    }
}

 

2. 判断设备类型来加载不同的内容。目前自己采用的这种方式,因为需要的不是css样式不同,而是使用的元素类别都不一样了,响应式布局无法满足需要。

判断设备可以检查user-agent里的关键词。

比如电脑版的safari是:

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15

iphone的safari则是:

Mozilla/5.0 (iPhone; CPU iPhone OS 11_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.0 Mobile/15E148 Safari/604.1

在你的django app下面添加一个文件,比如device_agent.py, 添加如下内容:

def device(request):
    '''from mobile browser or pc browser'''
    user_agent = request.META['HTTP_USER_AGENT'].lower()
    mobile_re = ['iphone','android','mobile']

    is_mobile = False
    for keyword in mobile_re:
        if user_agent.find(keyword) >= 0:
            is_mobile = True
            break

    if is_mobile:
        return {'device_type': 'mobile'}
    else:
        return {'device_type': 'pc'}

在settings.py里更新如下内容:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
                'bobjiang.device_agent.device' # add device_agent
            ],
        },
    },
]

在html模板中就可以使用device_type来判断设备类型并加载不同内容啦。

{% if device_type != 'mobile' %}
    <ul class="navbar-nav">
{% else %}
    <ul class="nav nav-pills justify-content-center">
{% endif %}

 

下一篇:  Mac卸载Java和安装openjdk
上一篇:  iOS自动化使用appium关于gesture的更新

共有0条评论

添加评论

暂无评论