【问题标题】:how to preserve leading zeros in Flask routing如何在 Flask 路由中保留前导零
【发布时间】:2015-06-15 10:08:10
【问题描述】:

我正在构建看起来像这样的 URL,使用 Flask 进行路由:

http://hostname/nris/resource/00001234 http://hostname/nris/resource/99000025

最后一段是一个 8 位整数,将匹配我数据库中的字符串。前导零(如果有)很重要。

我已经实现了一个基于Does Flask support regular expressions in its URL routing? 的自定义正则表达式转换器。只要数字字段以非零开头,它就可以正常工作。这是我的路由代码(在/nris/ 中加载):

@app.route('/numish/<regex("[0-9]{8}"):resourcenum>/')
def numish(resourcenum):
    return "resourcenum: %s" % (resourcenum)
@app.route('/resource/<regex("[0-9]{8}"):resourcenum>/')
def resource_page(resourcenum):
    return render_template('singlemap.html', propnris=resourcenum)

当我访问http://hostname/nris/numish/00000004时,我看到了

resourcenum: 00000004

但是当我在我的模板中显示它时,控制台上显示的都是 4,而在 addSingleSiteLayer() 中执行的数据库查询得到 4,而不是 00000004。这是我用来生成 JavaScript 的 Jinja 代码:

{% extends "maptemplate.html" %}
{% block mapcustom %}
console.log( "hello" );
console.log( {{propnris}} );
addSingleSiteLayer(map, {{propnris}} );
{% endblock %}

我可以简单地将传入的值重新格式化为带有前导零的 8 个字符串。但我宁愿将参数向下传递,以免它一开始就被截断。有没有干净的方法来做到这一点?

【问题讨论】:

    标签: python regex flask jinja2


    【解决方案1】:

    顺便说一句,对于 Flask 中 url 路由的原始问题,您现在可以指定具有固定位数的参数。

    例如

    @app.route('/numish/<int(fixed_digits=8):resourcenum>/')
    

    当您在代码中使用 url_for() 时,将使用正确的位数构造 url。

    有关可用路由参数的更多详细信息,请点击此处:http://werkzeug.pocoo.org/docs/0.14/routing/

    【讨论】:

      【解决方案2】:

      你将你的值传递给 JavaScript,它忽略了你给它的整数文字上的前导零。这几乎不是 Python 或 Flask 的错。

      通过将值括在引号中使其成为字符串文字:

      {% extends "maptemplate.html" %}
      {% block mapcustom %}
      console.log( "hello" );
      console.log( "{{propnris}}" );
      addSingleSiteLayer(map, "{{propnris}}" );
      {% endblock %}
      

      或者更好的是,format it as JSON 为您处理任何报价问题:

      {% extends "maptemplate.html" %}
      {% block mapcustom %}
      console.log( "hello" );
      console.log( {{propnris|tojson|safe}} );
      addSingleSiteLayer(map, {{propnris|tojson|safe}} );
      {% endblock %}
      

      由于 Flask 的 tojson 过滤器产生有效的与 JavaScript 兼容的 JSON 输出,这可以直接解释为 JavaScript 文字,并且 Python 字符串被正确引用。

      【讨论】:

        猜你喜欢
        • 2023-03-03
        • 2020-06-11
        • 1970-01-01
        • 1970-01-01
        • 2011-10-01
        • 2017-05-05
        • 2017-04-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多