如何将样式应用于Flask中生成的HTML页面

时间:2019-04-26 20:22:31

标签: python-3.x flask

我有一个图书搜索页面。用户搜索书籍时,页面中会显示相关书籍的列表。所有行都有一个超链接,当用户单击时,它会转到详细信息页面。我使用/ is / 1236BCD2等isbns生成详细信息页面作为搜索的扩展。因此,对于每本书,此页面地址是不同的。这是问题,我用于所有页面的styles.css无法应用到这些页面。我认为这是因为烧瓶结构。似乎当它尝试打开页面时,它搜索的是/search/static/styles/styles.css而不是/search/1236BCD2/static/styles/styles.css。我应该怎么做才能解决它?

2 个答案:

答案 0 :(得分:0)

使用template inheritance

  

模板继承允许您构建一个基本的“骨架”模板,该模板包含站点的所有常见元素,并定义子模板可以覆盖的块。

然后,如果数据库中有书籍,则创建详细信息视图。

@app.route('/details/<bookid>')
def details(id):
    # search for a book with that id in the database

答案 1 :(得分:0)

不幸的是,您的问题有些模糊,所以我的回答也有些模糊。

  1. 您的Flask应用程序设置为提供静态文件是否存在问题?您的目录结构是否与Flask应用程序配置匹配,以便Flask可以找到所需的静态文件?通常,Flask希望在应用程序的根目录中存在一个名为“ static”的文件夹。应用程序的根目录是实例化包含Flask应用程序的文件的目录。例如,您可能有一个名为“ app.py”的文件,其中包含一行app = Flask(__name__)。在这种情况下,默认情况下,“ app.py”所在的目录将是您的应用程序的根目录。默认情况下,Flask期望一个名为“ static”的文件夹与该文件存在于同一目录中。但是,可以将静态文件夹的名称更改为所需的名称。通过执行类似app = Flask(__name__, static_folder="search")的操作,可以将静态文件夹更改为“搜索”而不是“静态”。有关应用程序配置参数,请参见here。因此,根据您的应用配置,Flask应该在/static/styles/styles.css/search/styles/styles.css中查找您的静态文件。如果您希望Flask在/static/1236BCD2/styles/styles.css/search/1236BCD2/styles/styles.css之类的目录中找到“ styles.css”,则可能是您不了解目录结构必须与Flask应用程序的配置方式相匹配,还是为每本书(不希望这样做)生成不同的目录和不同的styles.css。
  2. 我假设您不是为每一本书动态生成一个文件夹和一个CSS文件。假设您现在已经确保将Flask应用程序配置为与项目目录结构匹配,则可以使用url_for()函数来确保Flask可以将静态资产链接到HTML页面。如果您想对值进行硬编码(我不建议),则可以像<link rel="stylesheet" href='/static/styles/styles.css'>这样链接资产,也可以像url_for()这样使用<link rel="stylesheet" href='url_for("static", filename="styles/styles.css)'>。 “文件名”参数值始终相对于静态目录。
  3. 我的直觉是您拥有静态文件的默认Flask应用程序配置,但您不了解如何使用Jinja2模板引擎在HTML页面中链接这些静态资源。有关在Flask中提供静态文件的一般信息,请参见here。如果我错了,并且您具有某种复杂的CSS生成和用法,并且需要将您的应用程序配置为处理该问题,则需要查看Flask Blueprints。烧瓶蓝图可让您为每个蓝图设置不同的静态目录,然后您可以根据需要创建任意数量的蓝图来处理各种书籍。