如何在 Django 应用程序中使用来自预制 index.html 模板和 css 的相对路径?
Posted
技术标签:
【中文标题】如何在 Django 应用程序中使用来自预制 index.html 模板和 css 的相对路径?【英文标题】:How do I use relative paths from a pre-made index.html template and css in a Django app? 【发布时间】:2019-05-20 13:04:42 【问题描述】:我正在使用预制的引导程序 index.html 和 css 表。在之前的文件夹结构中,index.html 和所有随附的文件夹(如 css、js、fonts、img 等)都在一个文件夹中。现在它们在两个地方,如下所示。当我从本地 Django 开发网络服务器将索引页面作为应用程序打开时,它可以正常加载索引,但页面上的所有相关链接都已损坏 - css、js、img 等...
我是 Django 新手。
以前的引导文件夹结构:
- public_web_site
- bootstrap_1
- css
- fonts
- img
- js
- index.html
我希望 Django 项目按如下方式组织:
- myproject
- polls
- myproject_django
- public_web_site
- static
- public_web_site
- bootstrap_1
- css
- fonts
- img
- js
- admin
- templates
- public_web_site
- index.html
- admin
- admin.py
- apps.py
- models.py
- urls.py
- views.py
这行得通:
% load static %
<link rel="stylesheet" type="text/css" href="% static 'public_web_site/css/bootstrap.min.css' %">
但事实并非如此:
<link rel="stylesheet" href="css/bootstrap.min.css">
Not Found: /pub_boots/css/bootstrap.min.css
重新陈述问题:是否可以在某个地方添加变量或路径名以允许预制模板运行,而无需我编辑每个相对链接以使用 Django % static % 路径?还是有一种更简单/更好的方法可以将预制的引导网站放入 Django 应用程序中?
【问题讨论】:
【参考方案1】:如果您在 HTML 中省略前面的“/”路径,它将查找从当前 URL 开始的文件。示例:
如果你从“http://www.example.com/some-directory/somepage.html”调用“css/bootstrap.min.css”
浏览器会请求:http://www.example.com/some-directory/css/bootstrap.min.css
您没有发布引荐来源网址,因此可能需要检查一下。为了安全起见,我总是使用绝对路径,尤其是因为我使用了 mod-rewrite。
【讨论】:
我认为两种情况下的引荐来源网址是不同的——一种使用 Django % static % 变量,另一种是纯 html。而且由于基本文件夹结构已更改(索引曾经位于带有 img、js、css 文件夹的文件夹中),现在 html 路径不起作用。我在问是否有一种简单的方法可以添加新路径,这样我就不必更改所有链接。您的回答激发了一种可能的解决方法 - 可以移动 index.html。但我认为这会破坏 Django 中的模板引擎:) 感谢您的回答,我用您关于相对 URL 的要点更新了问题 - 希望更清楚一点。 也许创建指向资产目录的符号链接?当然,这需要 shell 访问您的托管服务器!以上是关于如何在 Django 应用程序中使用来自预制 index.html 模板和 css 的相对路径?的主要内容,如果未能解决你的问题,请参考以下文章
Django:项目使用来自 REST API 的数据,如何在这个系统中使用外部应用程序?