【问题标题】:Flask get viewport sizeFlask 获取视口大小
【发布时间】:2016-09-28 09:41:48
【问题描述】:

一个简短的问题:有没有办法通过 Flask 获取我的浏览器视口大小?

我正在为许多设备设计一个页面,例如:普通 PC、iphone 等...

谢谢你,FFodWindow

【问题讨论】:

  • Flask 应用在服务器端运行。要获取此类信息,您需要在客户端上运行一些东西,例如 Java Script。

标签: python html flask


【解决方案1】:

在您收到用户请求并在请求中明确提供该数据(或使用 UserAgent 将某些设备映射到视口大小之前,这是不可能的,但用户可以更改 UserAgent,因此这不一定可靠)。

Flask 仅在服务器上运行,因此不知道客户端是什么。例如,我可以从我的终端、另一个服务器或另一个 Python 应用程序发送一个请求,而你的 Flask 服务器仍然会响应而不知道我从哪里发送它。如果我真的想,我可以将所有设置为同一个 UserAgent,这样就无法区分三个不同的客户端。

最简单的方法是使用 CSS 媒体查询在客户端制作您的内容 responsive

【讨论】:

  • 感谢您的回复,但我使用的是散景图,您需要在开始时设置它的宽度和高度...
  • @FFoDWindow 不管你用的是什么,在服务器上还是获取不到宽高。
【解决方案2】:

Rushy 已经提供了一个正确的答案,但是当你想使用烧瓶和散景时(我现在处于相同的位置)响应式设计在所有情况下都没有帮助(我使用的是散景网格图并且不想要如果从移动设备访问)。

我会将“/mobile”附加到从我的主页到移动设备上的绘图页面的链接(通过使用 css 检查屏幕宽度),然后使绘图布局取决于是否将“/mobile”附加到关联。 显然这有一些缺点(如果桌面上的某人向移动设备上的某人发送链接或其他方式),但由于我的页面受登录保护,无论如何在大多数情况下它们将被重定向到登录页面(如果他们尚未登录),需要手动进入情节页面。

以防万一这对某人有所帮助。

【讨论】:

  • 我也在使用散景并希望获得一个响应式图表并找到了这个答案here我的解决方案看起来像这样,可以很好地适应不同的屏幕尺寸:plot = figure(plot_width=800, plot_height=500, x_axis_type="datetime")plot.sizing_mode = "stretch_width"
【解决方案3】:

一个丑陋的 JavaScript 解决方法,但它仍然有效:

假设您的原始路线如下所示:

@app.route('/user/<user>')
def user(user):
    return 'Hello ' + user

变通后的路线:

@app.route('/user/<user>', defaults={'width': None, 'height': None})
@app.route('/user/<user>/<width>/<height>')
def user(user, width=None, height=None):
    if not width or not height:
        return """
        <script>
        (() => window.location.href = window.location.href +
        ['', window.innerWidth, window.innerHeight].join('/'))()
        </script>
        """
    return 'Hello %s (%s, %s)' %(user, width, height)

【讨论】:

    猜你喜欢
    • 2011-03-03
    • 2012-05-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    相关资源
    最近更新 更多