python's docs

3.0.0 动态的route


1. 基本的route

@app.route('/')
def homepage():
    return render_template("home.html")

2. 动态route,带变量

@app.route('/html/<cat1>/<cat2>/<topic>')
def content(cat1, cat2, topic):
    page = '/'.join(['/html', cat1, cat2, topic])
    return render_template(page, TOPIC_DICT = TOPIC_DICT)

flask variable-rules route doc


3. 遇到的问题

后期调整网站目录结构,将上面的route改成了如下内容,去掉了"/home"

@app.route('/<cat1>/<cat2>/<topic>')
def content(cat1, cat2, topic):
    page = '/'.join(['/html', cat1, cat2, topic])
    return render_template(page, TOPIC_DICT = TOPIC_DICT)

发现static的css内容均无法加载,排查后发现,原来是因为访问css文件时url为"www.mydomain/static/css/somecss.css"
这样的话正好与上面的route匹配,然后我们render_template的文件是在templates目录下寻找,而static是在static目录下找,所以造成了template not found错误

进行下面修改,配置动态route仅对html文件有效

@app.route('/<cat1>/<cat2>/<topic>.html')
def content(cat1, cat2, topic):
    topic = topic + ".html"
    page = '/'.join(['/html', cat1, cat2, topic])
    return render_template(page, TOPIC_DICT = TOPIC_DICT)