1

所以我的问题是我想要一个只有一个 navbar.html 文件的网站。我可以用来添加到我网站的其他页面。我想出了最好的方法来做到这一点,因为我试图避免由于兼容性问题(学校网站,所以我试图获得最佳兼容性)。我正在为我的学校写这个网站,所以我不知道从现在开始会发生什么,但我想创建一个自动化系统,可以解析 html 文件的文件夹,然后进入每个文件夹并找到<nav id="mainNav">.....</nav>然后替换这两个标签之间的所有内容都包含来自一个中央 navbar.html 的内容,以便有人可以更改 navbar.html 然后运行此脚本,它只会自动更新网页。

现在我没有要求任何人为我编写代码,我对 python 有基本到中级的理解,所以如果有人能指出我正确的方向,比如可能有哪些方法可以解决这个问题。谢谢您的帮助。

编辑:我只想使用标准库,以便尽可能轻松地四处移动,最好只是一个 *.py 文件

编辑:请不要告诉我只是去获取一个我做不到的工具,服务器没有任何服务器端编程语言,我能做的最好的就是编辑本地文件,然后将静态页面上传到服务器。

编辑:修复它,使其成为主题。希望。

4

3 回答 3

2

我看到很多人批评您正在尝试做的事情,我将加入他们的行列。这是实现导航栏的可怕方式,也是“更新”网站的可怕程序调用。我会非常坚决地与您的学校保持一致,认为这不是一个明智的决定,与 PHP 或 Python 之类的免费替代方案相比,最终会浪费更多的时间以这种古老的方式进行。

话虽如此,我也会帮助您解决问题,因为看起来(基于您的推荐和回复)实现模板引擎或动态 Web 内容超出了您的控制范围,因此不是一个选择。一种方法可能是将导航栏替换脚本(我们称之为 script.py)放在 HTML 目录的顶部,并放在新的 navbar.html 文件旁边。

首先要获取文件,请使用以下命令查找子目录中的所有文件os.walk

import os

for root, dirs, files in os.walk(os.join(os.getcwd(), "html_dir"):
    for file in files:
        # do something with the directories
    for dir in dirs:
        # do something with the directories

显然,您需要进行递归,以便它适用于所有子文件夹中的所有 HTML 文件。

接下来,就替换而言,我建议阅读整个 navbar.html 文件,其中包含以下简单内容:

with open('file', 'r') as target_file:
    replacement_text = target_file.read()

要进行实际替换,我建议使用正则表达式。正则表达式会因内容而异,并且可能需要根据正在使用的确切数据进行调整。如果这些数据发生变化,它们也容易损坏。

import re 

new_html = re.sub(r'<nav id="mainNav">.*?</nav>', replacement_text, original_text)

您需要将所有内容拼凑在一起,并自行完成,但我认为这是解决此问题的可靠方法。然而,我再次重申:想到有人最终会使用这种方法更新他们的网站,我不寒而栗。此外,每次运行时备份文件,因为它失败可能会导致意外替换/删除文本。

于 2013-08-08T15:32:41.303 回答
0

创建网页/网站时使用模板引擎:例如,Jinja您可以使用基本 html 模板。你也可以在其他引擎中做类似的事情

并且有很多选择:http ://wiki.python.org/moin/Templating

如果您决定不使用引擎,请创建一个 base.html 并且您可以接受这不是非常可扩展/可读/等等。

stuff stuff $$$my_flag$$$ stuff stuff$$$my_flag$$$用字符串 replaceAll 替换。那是你要的吗?

于 2013-08-08T14:18:09.110 回答
-1

服务器是否有 SSI 或 PHP?有一个包含功能可以满足您的需求。查找 SSI 包括

http://www.htmlgoodies.com/beyond/webmaster/article.php/3473341/SSI-The-Include-Command.htm

因此,您只需更改导航栏文件,它就会在包含它的所有页面上更改

于 2013-08-08T14:41:19.683 回答