1

我试图让外部 css 文件在 django 1.3 开发服务器上工作。我阅读了 django 的“管理静态文件”以及许多类似的 SO 问题,但我似乎仍然做错了什么。

为什么我去的时候我的 CSS 样式没有正确显示localhost:8000/page

目录结构

myproject
|-- manage.py
|-- settings.py
|-- urls.py
|-- app
    |-- __init__.py
    |-- models.py
    |-- tests.py
    |-- views.py
    |-- static
        |-- css
            |-- page.css
|-- templates
    |-- app
        |-- page.html

我的项目/views.py

import django.http
import django.template.loader
import django.template  

def page_function(request):
    t = django.template.loader.get_template("page.html")
    c = django.template.Context()
    return django.http.HttpResponse(t.render(c))

我的项目/urls.py

from django.conf.urls.defaults import patterns, include, url
import myproject.app.views

urlpatterns = patterns('',(r'page/$', myproject.app.views.page_function),)

myproject/templates/app/page.css

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}page.css" />
</head>
<body>

<h1>My First Heading</h1>

<p>My first paragraph.</p>

</body>
</html> 

我的项目/settings.py

(部分)

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = ''

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    "/home/myusername/Desktop/myproject/app/static",
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

ROOT_URLCONF = 'myproject.urls'

TEMPLATE_DIRS = (
    '/home/myusername/Desktop/myproject/templates/app', 
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app'
)
4

2 回答 2

3

来自django 文档

如果 {{ STATIC_URL }} 在您的模板中不起作用,您可能在渲染模板时没有使用 RequestContext。

作为一个简短的复习,上下文处理器将变量添加到每个模板的上下文中。但是,上下文处理器要求您在呈现模板时使用 RequestContext。如果您使用的是通用视图,这会自动发生,但在手工编写的视图中,您需要显式使用 RequestContext 要了解其工作原理并阅读更多详细信息,请查看子类化上下文:RequestContext。

另一种选择是 get_static_prefix 模板标签,它是 Django 核心的一部分。

代替

{{ STATIC_URL }}page.css

你会想要使用:

{% load static %}
{% get_static_prefix %}css/page.css

另请注意,目录结构是由静态文件维护的,因此由于您的 page.css 位于“static”的子目录中,因此您需要将其作为“css/page.css”加载到模板中。

于 2012-07-23T18:55:34.093 回答
0

也更换

<link rel="stylesheet" type="text/css" href="{{ STATIC_URL }}page.css" />

{% load static %}
<link rel="stylesheet" type="text/css" href={% myproject "app/static/css/page.css" %}>

应该管用。

于 2019-09-19T08:36:52.897 回答