有可能在django中硬编码CSS链接吗?



我有一个django项目,想硬编码一个链接到CSS(我不希望使用STATIC_FILES…等)。原因是因为我希望能够点击index.html,它将在浏览器上工作(包括获取css文件)。

我把index.htmlindex.css放在同一个目录下,并在index.html:

中添加这一行
<link rel="stylesheet" type="text/css" href="./index.css"/> 

当我双击index.html时,它会完美导入index.css

然而,当我用django开发服务器加载它并通过浏览器打开时,它没有导入index.css.

如何使index.html接受index.css?

Christopher Schäpers的答案很好,我想通过展示如何实际执行她的建议来扩展她的答案。

假设你有

<link rel="stylesheet" type="text/css" href="/index.css"/> 

表示浏览器正在请求localhost:8000/index.css,因此在根urls.py文件中,添加如下内容

from django.urls import path
from django.conf import settings
from django.http import HttpResponse
def css_path(request):  # This is basically a "view"
    path = settings.BASE_DIR / 'index.css'  # For earlier Django version: os.path.join(settings.BASE_DIR, 'index.css')
    with open(path, 'rb') as f:
        content = f.read()
    return HttpResponse(content, content_type='text/css')
urlpatterns = [
    # ... (your other url patterns)
    path('index.css', css_path)
]

注意:请记住根据您所服务的内容正确设置content_type关键字参数(例如:application/javascript用于.js, image/png用于.png, .等)。

这是因为浏览器使用了基于目录的方法。

假设你的模板目录是这样的:
/home/yura/project/templates/
                            → index.html
                            → index.css

当用浏览器打开index.html时,它会在同一目录中查找index.css,因此对于/home/yura/project/templates/index.css

现在当你运行开发服务器时,它不再是基于目录的。urls.py文件指定了每个路径的指向。
您可能有一条通往index.html的路由/,即使index.html没有被称为空。您还可以添加路由/blog/,它可能会导致blog_home.html,即使文件名为blog_home.html
每个进入django的url都是通过urls.py文件路由的。这是django的核心概念之一。url应该是用户可输入和可读的,不需要像.php, .html这样的cruft,这些来自于基于目录的方法,如PHP或CGI。

由于您没有定义名为/index.css的路由,因此无法找到index.css
如果您正在做的事情是一次性的,您最好的选择是添加一条到/index.css的路由来传递index.css

否则没有办法这样做,因为django不是基于目录的,正如上面指出的。

你可能会想为什么你想直接在浏览器中打开原始的html文件,因为它使django模板语言对你来说完全没用,因此你不能做任何变量,循环和逻辑相关的事情,并且被基本的html所困扰,而不是django-dev服务器可以使用简单的http-server来代替。

最新更新