在URL中添加短划线

时间:2017-08-16 15:50:03

标签: python flask routes

我想在flask自动生成网址时在我的网址中添加短划线。

代码如下所示:

@main.route('/post_detail/<string:title>', methods=['GET', 'POST'])
def post_detail(title):
    post = Post.query.filter_by(title=title).first_or_404()
    return render_template('post_detail.html', post=post)

由于我在路线中使用FLASK内置转换,当标题中有空格(例如,标题为title title)时,网址将如下xxx.title title,我该怎么做才能添加在网址中划线,例如xxx.title_title

我不想在标题中添加破折号(例如,标题为title_title

这是我的模板:

post_detail.html

<h1 color='black'>{{ post.title | replace('_', ' ') }}</h1>
<h2 class="subheading">{{ post.summary }}</h2>
<span class="meta">Posted by <a href="#">{{ post.author.username }}</a></span>

`和 post_list.html

{% for post in posts %}
<div class="post-preview">
    <a href="{{ url_for('main.post_detail', title=post.title) }}">
        <h2 class="post-title">{{ post.title }}</h2>
        <h3 class="post-subtitle">{{ post.summary }}</h3>
    </a>
    <p class="post-meta">Posted by <a href="#">{{ post.author.username }}</a></p>
</div>
{% endfor %}

1 个答案:

答案 0 :(得分:0)

很高兴看到你的模板。

无论如何,这是解决问题的有效方法。

重要的是你如何在模板中构建细节网址。

使用参数查看url_for的用法。此外,当您显示帖子的详细信息页面时,请检查浏览器地址行,其中包含标题中的空格。

html charset的所有替换都将由模板引擎执行,因此您无需担心。

在您的实现中,您可以删除get_post方法和POSTS列表,因为您可能正在使用 SQLAlchemy ORM 。它们只是用于快速测试。

<强> app.py

from flask import Flask, abort, render_template

main = Flask(__name__)

POSTS = [
    {'title': 'this_is_a_title'},
    {'title': 'this_is_another_title'},
    {'title': 'this title contains space'},
]

def get_post(title):
    for post in POSTS:
        if post['title'] == title:
            return post
    return None

@main.route('/post_list', methods=['GET', 'POST'])
def post_list():
    return render_template('post_list.html', posts=POSTS)

@main.route('/post_detail/<string:title>', methods=['GET', 'POST'])
def post_detail(title):
    #post = Post.query.filter_by(title=title).first_or_404()
    post = get_post(title)
    if post is None:
        abort(404)
    return render_template('post_detail.html', post=post)

if __name__ == '__main__':
    main.run(debug=True)

<强>模板/ post_list.html

<html>
  <body>
    <h1>POST LIST</h1>
    {% for post in posts %}
      <h3>{{ post.title }}</h3>
      <a href="{{ url_for('post_detail', title=post.title) }}">details</a>
    {% endfor %}
  </body>
</html>

<强>模板/ post_detail.html

<html>
  <body>
    <h1>POST DETAIL</h1>
    <h3>{{ post.title }}</h3>
  </body>
</html>

希望,这有帮助。