
本文详解为何仅添加 html 模板和导航栏链接无法访问页面,以及如何在 flask 或 django 中正确定义路由与视图,使 navbar 链接(如 `/öppettider`)成功渲染对应模板。
导航栏中的 Öppettider 看似简单,但它只是一个前端超链接——点击后浏览器会向服务器发起对 /öppettider 这个 URL 的 HTTP 请求。但服务器是否能响应这个请求,完全取决于后端是否已注册该路径并指定了处理逻辑。仅在 templates/ 目录下新建 öppettider.html 文件是不够的,这就像建好了一扇门(HTML),却没修通往它的路(路由)和开门的人(视图函数)。
✅ 正确做法:前后端协同配置
▪ 若使用 Flask
需在主应用文件(如 app.py)中定义路由和视图函数:
from flask import Flask, render_template
app = Flask(__name__)
# ✅ 必须添加此路由,URL 路径与 navbar href 严格一致
@app.route('/öppettider')
def öppettider_view():
return render_template('öppettider.html') # 注意:文件名需与 templates/ 下实际名称一致⚠️ 注意事项:
- 路由路径 /öppettider 必须与 完全匹配(包括大小写、特殊字符、尾部斜杠);
- render_template() 中的文件名是相对于 templates/ 目录的路径,例如 templates/öppettider.html → 写 'öppettider.html';
- 确保文件编码支持 UTF-8(尤其含 ö 等字符),建议在 Python 文件顶部添加 # -*- coding: utf-8 -*-;
- 修改代码后需重启 Flask 开发服务器才能生效。
▪ 若使用 Django
需两步操作:在 views.py 中编写视图函数,在 urls.py 中注册路由。
-
views.py(添加视图):
from django.shortcuts import render
def öppettider_view(request): return render(request, 'öppettider.html') # context 可选,如需传数据可加字典参数
2. **`urls.py`(添加 URL 映射)**:
```python
from django.urls import path
from . import views
urlpatterns = [
# ... 其他路径
path('öppettider/', views.öppettider_view, name='opentider'), # name 可选,用于 {% url %} 模板标签
]✅ 提示:Django 项目通常有主 urls.py(项目级)和应用级 urls.py,请确保将新路径包含在最终生效的 urlpatterns 中(常通过 include() 引入应用路由)。
? 排查 404 的关键检查清单
- [ ] 后端是否已定义对应 URL 的路由?
- [ ] 视图函数是否正确返回 render_template()(Flask)或 render()(Django)?
- [ ] HTML 模板文件是否真实存在于 templates/ 目录下,且文件名拼写、大小写、扩展名完全一致?
- [ ] 服务器是否已重启(Flask)或 runserver 是否正在运行(Django)?
- [ ] 浏览器地址栏跳转后 URL 是否确实是 /öppettider/(注意 Django 默认要求尾部 /)?
? 进阶建议:为避免硬编码 URL,Django 推荐在模板中使用 {% url 'opentider' %} 替代 /öppettider/;Flask 可用 url_for('öppettider_view')。这样即使日后修改路径,也只需改一处。
完成以上配置后,点击导航栏“Öppettider”,服务器将正确接收请求、执行视图、渲染模板——你的图片(或其他内容)就能如期展示了。










