我想在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 %}
答案 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>
希望,这有帮助。