可以添加一个 HTML<base>
元素来更改所有链接所指的内容:
<base href="{% get_static_prefix %}{{ request.path }}"/>
这将意味着浏览器将链接解释为好像文件是从而/static/path/to/file.html
不是/path/to/file.html
. 不过,我发现这使得链接其他静态 html 文件变得更加复杂,因为它们随后被直接链接到。
相反,您可以只为其他 URL 提供重定向,以便它们在相对于通过模板提供的 HTML 的位置上注册(在我的情况下,我希望/static/projects
通过模板提供其中和下面的所有 html 文件projects_frame.html
)。在urls.py
:
# Handle projects by serving static files in a frame; redirect indexes
url("^projects/(?P<path>[^./]+)/$", RedirectView.as_view(url="/projects/%(path)s/index.html")),
url("^projects/[^/]+/.*[.]html$", direct_to_template, {"template": "projects_frame.html", "extra_context": {"STATIC_FILES_ROOT": settings.STATIC_FILES_ROOT}}, name="projects"),
url("^projects/(?P<path>[^/]+/.*[.].*)$", RedirectView.as_view(url="/static/projects/%(path)s")),
然后我的模板看起来像这样(我使用的是夹层,所以这不是普遍适用的,但应该给出一个想法):
{% extends "base.html" %}
{% load i18n staticfiles %}
{% block meta_title %}{% trans "Home" %}{% endblock %}
{% block title %}{% trans "Home" %}{% endblock %}
{% block breadcrumb_menu %}
<li class="active">{% trans "Home" %}</li>
{% endblock %}
{% block body %}
{% ssi STATIC_FILES_ROOT|add:request.path %}
{% endblock %}
PSSTATIC_FILES_ROOT
是我定义的自定义变量,因为我遇到了一个问题STATIC_ROOT