Django 模板嵌套包含传递变量

Django template nested include passing variables

我使用 django 模板 index.html 来渲染首页。它包括另一个用于创建 link 图标的模板。此模板 url_icon.html 包含另一个模板 icon.html。在传递参数时,我遇到了一个错误。如何解决?

index.html

.
.
.
{% include "url_icon.html" with name="return" url="/" %}
.
.
.

url_icon.html

<a href="{{url}}">{% include "icon.html" with icon={{ name }} %}</a>

icon.html

<img src="/static/images/{{ name }}.png" />

导致错误:

Could not parse the remainder: '{{' from '{{'

看起来您可以做一些事情 improve/fix。解决#1 和#2 应该可以解决您的问题。我还添加了可能需要重构的最佳实践建议(#3、#4)。

  1. 您似乎需要从 name 中删除 {% include %} 标签内的 curly-braces。无需额外语法即可在标签内使用上下文变量。

url_icon.html:

{% include "icon.html" with icon=name %}
  1. icon.html 将有权访问 name,因为您在更新其上下文时没有使用 only 关键字,因此您的代码一开始可能看起来有效({% include %} documentation).但是,您的意图似乎是将其称为 icon.
  • 使用变量 icon 代替 name

icon.html:

<img src="/static/images/{{ icon }}.png" />
  1. 可选建议:使用 Django 的静态文件系统

尝试为您的图标使用 {% static %} 标签。这将有助于简化部署,尤其是当您使用与网络服务器不同的 CDN 时。有很多关于如何在生产中为 Django 项目设置静态文件的文献,这是一个很大的话题,但如果您从一开始就使用 {% static %} 标签,您将能够更轻松地处理它。

  1. 可选建议:Django的URL路由系统

您在 index.html 的路线是 hard-coded 到 "/"。 Django 有一个强大的 URL 引用系统可以利用。如果您也使用 Django 定义了根 URL /,您可以通过名称引用它。 Docs: {% url %}, and for the back-end, reverse().