Flask或Django中如何正确地嵌套HTML模板?
时间: 2024-09-10 12:08:45 浏览: 75
django中模板的html自动转意方法
在Flask或Django中,HTML模板通常通过视图函数返回,这些视图负责获取模型数据并将其传递给模板。模板本身是可以嵌套的,这允许你在大块内容中嵌入小的自定义部分。
在Flask中,假设你有一个主模板`base.html`和一个内嵌的子模板`navbar.html`:
**base.html**
```html
<!doctype html>
<html>
<head>
...
</head>
<body>
{% include 'navbar.html' %}
{% block content %}{% endblock %}
</body>
</html>
```
**navbar.html**
```html
<nav>
<a href="/">首页</a>
<a href="/about">关于</a>
</nav>
```
在这个例子中,`{% include 'navbar.html' %}`会从`base.html`中插入`navbar.html`的内容。然后在其他视图中,你可以定义`content`区域:
```python
from flask import render_template_string
@app.route('/index')
def index():
return render_template_string("""
{% extends 'base.html' %}
{% block content %}
<h1>欢迎来到主页</h1>
{% endblock %}
""")
```
同样,在Django中,也使用`include`标签嵌套模板:
**base.html**
```html
<html>
<head>
...
</head>
<body>
{% load include_tag %}
{% include "navbar.html" %}
{% block content %}{% endblock %}
</body>
</html>
```
**navbar.html**
```html
<nav>
...
</nav>
```
在Django视图中:
```python
from django.shortcuts import render
def index(request):
return render(request, 'index.html', {'navbar': 'navbar'})
```
在`index.html`中引用`navbar`:
```html
{% include navbar with navbar_content %}
```
这样就实现了模板的嵌套。
阅读全文