【发布时间】:2016-09-28 09:41:48
【问题描述】:
一个简短的问题:有没有办法通过 Flask 获取我的浏览器视口大小?
我正在为许多设备设计一个页面,例如:普通 PC、iphone 等...
谢谢你,FFodWindow
【问题讨论】:
-
Flask 应用在服务器端运行。要获取此类信息,您需要在客户端上运行一些东西,例如 Java Script。
一个简短的问题:有没有办法通过 Flask 获取我的浏览器视口大小?
我正在为许多设备设计一个页面,例如:普通 PC、iphone 等...
谢谢你,FFodWindow
【问题讨论】:
在您收到用户请求并在请求中明确提供该数据(或使用 UserAgent 将某些设备映射到视口大小之前,这是不可能的,但用户可以更改 UserAgent,因此这不一定可靠)。
Flask 仅在服务器上运行,因此不知道客户端是什么。例如,我可以从我的终端、另一个服务器或另一个 Python 应用程序发送一个请求,而你的 Flask 服务器仍然会响应而不知道我从哪里发送它。如果我真的想,我可以将所有设置为同一个 UserAgent,这样就无法区分三个不同的客户端。
最简单的方法是使用 CSS 媒体查询在客户端制作您的内容 responsive。
【讨论】:
Rushy 已经提供了一个正确的答案,但是当你想使用烧瓶和散景时(我现在处于相同的位置)响应式设计在所有情况下都没有帮助(我使用的是散景网格图并且不想要如果从移动设备访问)。
我会将“/mobile”附加到从我的主页到移动设备上的绘图页面的链接(通过使用 css 检查屏幕宽度),然后使绘图布局取决于是否将“/mobile”附加到关联。 显然这有一些缺点(如果桌面上的某人向移动设备上的某人发送链接或其他方式),但由于我的页面受登录保护,无论如何在大多数情况下它们将被重定向到登录页面(如果他们尚未登录),需要手动进入情节页面。
以防万一这对某人有所帮助。
【讨论】:
plot = figure(plot_width=800, plot_height=500, x_axis_type="datetime")plot.sizing_mode = "stretch_width"
一个丑陋的 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)
【讨论】: