在Django视图中,我很难找到一种简单的方法来检测请求是否来自移动设备.

我正在try 实现这样的功能:

#views.py

def myfunction(request):

    ...
    if request.mobile:
        is_mobile = True
    else:
        is_mobile = False

    context = {
        ... ,
        'is_mobile': is_mobile,
    }
    return render(request, 'mytemplate.html', context)

mytemplate.html年后:

{% if is_mobile %}    
    show something
{% else %}
    show something else
{% endif %}

无论我在哪里判断(例如herehere),都建议使用minidetector.我安装了不同的版本:pip install minidetectorpip install minidetector2,以及几个github存储库,但它们都不与Python 3兼容.

因此,我的问题是:是否有任何版本/分支的minidetector与Python 3兼容?如果没有,还有什么 Select ?

推荐答案

Django User Agents包与Python 3兼容.

按照上面提供的链接中的安装说明进行操作,然后您可以按如下方式使用它:

def my_view(request):

    # Let's assume that the visitor uses an iPhone...
    request.user_agent.is_mobile # returns True
    request.user_agent.is_tablet # returns False
    request.user_agent.is_touch_capable # returns True
    request.user_agent.is_pc # returns False
    request.user_agent.is_bot # returns False

    # Accessing user agent's browser attributes
    request.user_agent.browser  # returns Browser(family=u'Mobile Safari', version=(5, 1), version_string='5.1')
    request.user_agent.browser.family  # returns 'Mobile Safari'
    request.user_agent.browser.version  # returns (5, 1)
    request.user_agent.browser.version_string   # returns '5.1'

    # Operating System properties
    request.user_agent.os  # returns OperatingSystem(family=u'iOS', version=(5, 1), version_string='5.1')
    request.user_agent.os.family  # returns 'iOS'
    request.user_agent.os.version  # returns (5, 1)
    request.user_agent.os.version_string  # returns '5.1'

    # Device properties
    request.user_agent.device  # returns Device(family='iPhone')
    request.user_agent.device.family  # returns 'iPhone'

模板中的用法如下:

{% if request.user_agent.is_mobile %}
    Do stuff here...
{% endif %}

但是,请注意,Django 1.10中的中间件类已经更改.因此,如果您使用的是Django 1.10+,那么您必须修改这个包中的中间件类定义,如本文所示.

Python-3.x相关问答推荐

使用魔方无法从图像中识别单个字符

如何匹配字母,数字,短划线,逗号,但不是如果没有数字和字母?

使用Pandas 阅读Excel定义的名称和单元格值(&Q;)

Python根据阈值对数字进行分组

如何使用PySide6创建切换框架?

将列表项的极列水平分解为新列

文件名中的文件打开和撇号

如何在当前测试中使用fixture 转换后的数据进行参数化?

如何使用 Selenium Python 连续单击一个按钮直到另一个元素出现?

替换 .txt 文件中的项目列表

从一列字符串中提取子字符串并将它们放入列表中

将自动文本转换为 DataFrame

Keras 中 Conv2D 层的意外结果

python 3.10.5 中可能存在的错误. id 函数工作不明确

Python3四舍五入到最接近的偶数

如何在 Python3 中添加带有标志的命令行参数?

将 numpy.float64 列表快速转换为 Python 中的浮点数

如何在python中创建代码对象?

如何在 QGraphicsView 中启用平移和zoom

如何从集合中删除多个元素?