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

时间:2015-08-30 14:21:21

标签: django

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

我将 index.html index.css 放在同一目录中,并在index.html中添加了这一行:

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

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

但是,当我使用django开发服务器加载它并通过浏览器打开时,它不会导入 index.css

应该做什么才能让 index.html 获取 index.css

2 个答案:

答案 0 :(得分:1)

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

假设您的模板目录如下所示:

/home/yura/project/templates/
                            → index.html
                            → index.css

使用浏览器打开index.html时,它明显地在同一目录中查找index.css,因此/home/yura/project/templates/index.css

现在,当您运行开发服务器时,它不再是基于目录的。 urls.py文件指定了每条路径的位置。
即使/没有被称为“{1}”,您的路线index.html也可能导致index.html。即使文件名为/blog/,您也可以添加可能导致blog_home.html的路线blog_home.html
进入django的每个url都会通过urls.py文件进行路由。 这是django的核心概念之一。 URL应该是用户可用的,并且可读,而不是像.php.html那样来自基于目录的方法(如PHP或CGI)。

由于您尚未定义名为/index.css的路线,因此找不到index.css
如果您正在做的事情是一次性的,那么您最好的选择就是添加一条提供/index.css index.css的路线。

否则无法做到这一点,因为django不是基于目录的,如上所述。

您可能想要考虑为什么您希望能够直接在浏览器中打开原始html文件,因为它会使django模板语言对您完全无用,因此您无法做任何事情变量,循环和逻辑相关,并坚持使用基本的html,而不是django-dev服务器也可以使用简单的http服务器。

答案 1 :(得分:1)

克里斯托弗·谢珀斯(ChristopherSchä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的{​​{1}},.js的{​​{1}}, .etc)。