mirror of https://github.com/tiangolo/fastapi.git
⬆️ Upgrade Starlette to `>=0.29.0,<0.33.0`, update docs and usage of templates with new Starlette arguments (#10846)
* 📝 Update docs for compatibility with Starlette 0.29.0 and new template arguments * ⬆️ Upgrade Starlette to >=0.29.0,<0.33.0 * 📌 Remove AnyIO pin
This commit is contained in:
parent
f933fd6ff8
commit
c55f90df32
|
|
@ -27,7 +27,7 @@ $ pip install jinja2
|
||||||
* 📣 `Request` 🔢 *➡ 🛠️* 👈 🔜 📨 📄.
|
* 📣 `Request` 🔢 *➡ 🛠️* 👈 🔜 📨 📄.
|
||||||
* ⚙️ `templates` 👆 ✍ ✍ & 📨 `TemplateResponse`, 🚶♀️ `request` 1️⃣ 🔑-💲 👫 Jinja2️⃣ "🔑".
|
* ⚙️ `templates` 👆 ✍ ✍ & 📨 `TemplateResponse`, 🚶♀️ `request` 1️⃣ 🔑-💲 👫 Jinja2️⃣ "🔑".
|
||||||
|
|
||||||
```Python hl_lines="4 11 15-16"
|
```Python hl_lines="4 11 15-18"
|
||||||
{!../../../docs_src/templates/tutorial001.py!}
|
{!../../../docs_src/templates/tutorial001.py!}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,14 +25,16 @@ $ pip install jinja2
|
||||||
* Import `Jinja2Templates`.
|
* Import `Jinja2Templates`.
|
||||||
* Create a `templates` object that you can re-use later.
|
* Create a `templates` object that you can re-use later.
|
||||||
* Declare a `Request` parameter in the *path operation* that will return a template.
|
* Declare a `Request` parameter in the *path operation* that will return a template.
|
||||||
* Use the `templates` you created to render and return a `TemplateResponse`, passing the `request` as one of the key-value pairs in the Jinja2 "context".
|
* Use the `templates` you created to render and return a `TemplateResponse`, pass the name of the template, the request object, and a "context" dictionary with key-value pairs to be used inside of the Jinja2 template.
|
||||||
|
|
||||||
```Python hl_lines="4 11 15-16"
|
```Python hl_lines="4 11 15-18"
|
||||||
{!../../../docs_src/templates/tutorial001.py!}
|
{!../../../docs_src/templates/tutorial001.py!}
|
||||||
```
|
```
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
Notice that you have to pass the `request` as part of the key-value pairs in the context for Jinja2. So, you also have to declare it in your *path operation*.
|
Before FastAPI 0.108.0, Starlette 0.29.0, the `name` was the first parameter.
|
||||||
|
|
||||||
|
Also, before that, in previous versions, the `request` object was passed as part of the key-value pairs in the context for Jinja2.
|
||||||
|
|
||||||
!!! tip
|
!!! tip
|
||||||
By declaring `response_class=HTMLResponse` the docs UI will be able to know that the response will be HTML.
|
By declaring `response_class=HTMLResponse` the docs UI will be able to know that the response will be HTML.
|
||||||
|
|
@ -58,7 +60,7 @@ It will show the `id` taken from the "context" `dict` you passed:
|
||||||
|
|
||||||
## Templates and static files
|
## Templates and static files
|
||||||
|
|
||||||
And you can also use `url_for()` inside of the template, and use it, for example, with the `StaticFiles` you mounted.
|
You can also use `url_for()` inside of the template, and use it, for example, with the `StaticFiles` you mounted.
|
||||||
|
|
||||||
```jinja hl_lines="4"
|
```jinja hl_lines="4"
|
||||||
{!../../../docs_src/templates/templates/item.html!}
|
{!../../../docs_src/templates/templates/item.html!}
|
||||||
|
|
|
||||||
|
|
@ -13,4 +13,6 @@ templates = Jinja2Templates(directory="templates")
|
||||||
|
|
||||||
@app.get("/items/{id}", response_class=HTMLResponse)
|
@app.get("/items/{id}", response_class=HTMLResponse)
|
||||||
async def read_item(request: Request, id: str):
|
async def read_item(request: Request, id: str):
|
||||||
return templates.TemplateResponse("item.html", {"request": request, "id": id})
|
return templates.TemplateResponse(
|
||||||
|
request=request, name="item.html", context={"id": id}
|
||||||
|
)
|
||||||
|
|
|
||||||
|
|
@ -40,11 +40,9 @@ classifiers = [
|
||||||
"Topic :: Internet :: WWW/HTTP",
|
"Topic :: Internet :: WWW/HTTP",
|
||||||
]
|
]
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"starlette>=0.28.0,<0.29.0",
|
"starlette>=0.29.0,<0.33.0",
|
||||||
"pydantic>=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0",
|
"pydantic>=1.7.4,!=1.8,!=1.8.1,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0",
|
||||||
"typing-extensions>=4.8.0",
|
"typing-extensions>=4.8.0",
|
||||||
# TODO: remove this pin after upgrading Starlette 0.31.1
|
|
||||||
"anyio>=3.7.1,<4.0.0",
|
|
||||||
]
|
]
|
||||||
dynamic = ["version"]
|
dynamic = ["version"]
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue