如何在烧瓶中提供.html和.css目录?我的目录结构如下所示:
./docs/ # contains html
./docs/_static # contains .css and images
我想用路线指定./docs/index.html文件:
@app.route('/docs/')
def documentation():
return render_template('docs/index.html')
并且可以访问包含在./docs中的index.html的所有链接,而无需使用@ app.route明确指定它们。是否/如何做到这一点的任何想法?
谢谢!
答案 0 :(得分:1)
您必须将所有静态文件放在名为static
的文件夹中,并将所有模板放在名为templates
的文件夹中。所以你的文件夹结构应如下所示:
/docs/static/here_your_css_and_js_files
/docs/templates/here_your_html_files
要在您的html中加入.css
和.js
个文件,您必须在html文件的头部添加:
<link rel="stylesheet" type="text/css" href="{{ url_for('static', filename='style.css') }}">
如果您将.html
文件放在templates
目录中,则会自动创建evalWithTimeout
个文件。
答案 1 :(得分:0)
您可以动态创建路线,甚至可以创建自定义视图并浏览docs目录并设置自定义路径和模板名称。这样的事情对你有用:
import os
from flask import Flask, render_template
from flask.views import View
HOME_BASE = os.path.dirname(os.path.abspath(__file__))
TEMPLATE_BASE = os.path.join(HOME_BASE, 'templates')
TEMPLATE_BASE_LEN = len(TEMPLATE_BASE)
class CustomTemplateView(View):
def __init__(self, template_name):
self.template_name = template_name
def dispatch_request(self):
return render_template(self.template_name)
app = Flask(__name__)
for root, dirs, files in os.walk(os.path.join(TEMPLATE_BASE, 'docs')):
for file in files:
if file.endswith('.html'):
template_name = os.path.join(root, file)[TEMPLATE_BASE_LEN:]
doc_path = os.path.splitext(template_name)[0]
app.add_url_rule(doc_path, view_func = CustomTemplateView.as_view(
doc_path.replace('/', '_'), template_name = template_name[1:]))
此代码假定您的docs目录布局如下所示:
yourproject/__init__.py
yourproject/templates/docs/403.html
yourproject/templates/docs/404.html
yourproject/templates/docs/accounts/add.html
yourproject/templates/docs/accounts/edit.html
yourproject/templates/docs/accounts/groups/template1.html
yourproject/templates/docs/accounts/index.html
yourproject/templates/docs/accounts/users/index.html
yourproject/templates/docs/accounts/users/template1.html
yourproject/templates/docs/accounts/users/template2.html
...
上面的代码应该进入__init__.py
文件。