【问题标题】:Dynamic URL and Jinja templates动态 URL 和 Jinja 模板
【发布时间】:2020-01-27 06:03:18
【问题描述】:

我一直在尝试创建用户界面来过滤掉我的数据库中的结果。重要的是我希望过滤器是“附加的”。因此,如果用户选择一个过滤器,页面会重定向并显示结果。之后,用户可以选择另一个过滤器,结果将缩小到两个过滤器。对于任意数量的过滤器,这应该继续。

这就是现在的样子

@app.route('/')
def home():

    kind = request.args.get('kind')
    price = request.args.get('price')
    category = request.args.get('category')

    filters = {}
    if price is not None: filters['params.price'] = {'$lt' : int(price) }
    if kind is not None: filters['kind'] = kind
    if category is not None: filters['category'] = category

    posts = db.collection.find(filters)

    return render_template('home.html', posts=posts)

我使用 jinja2 模板的 href 链接看起来像

<li><a href="{{ url_for ('home', kind='m') }}">Label</a></<li>
<li><a href="{{ url_for ('home', price=50000)}}">Label</a></li>
<li><a href="{{ url_for ('home', category='p') }}">Label</a></li>
... many more similar links

目前,这可用作 URL 的覆盖。如果我单击其中任何一个链接,它只会替换整个 URL 并使用链接中的变量。

first link: http://127.0.0.1/?kind=m
second link: http://127.0.0.1/?price=5000
third link: http://127.0.0.1/?category=p

我想做的是追加查询 - 如果我点击任何链接,它会记住以前选择的过滤器并“添加”最后点击的链接。下面我展示了我期望它如何工作。

first link: http://127.0.0.1/?kind=m
second link: http://127.0.0.1/?kind=m?price=50000
second link: http://127.0.0.1/?kind=m?price=50000?category=p

【问题讨论】:

    标签: python flask jinja2 pymongo


    【解决方案1】:

    您可以将所有过滤器值(最初为None)传递给视图,并将它们作为参数添加到url_for 调用。 None 的过滤器不会包含在链接中。

    【讨论】:

    • 我做了这样的事情:def home(price=None, kind=None, category=None): 和链接:&lt;a href="{{ url_for ('home', category='p', price=price, kind=kind) }}"&gt; 但这最终在浏览器中作为 URL 栏中的空变量:http://127.0.0.1:5000/?price=50000&amp;category=&amp;kind= //对不起格式
    • 好的,所以我缺少的实际上是在渲染模板中传递变量。有用!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多