【问题标题】:Struggling with external css files in Django 1.3 development server在 Django 1.3 开发服务器中处理外部 css 文件
【发布时间】:2012-07-22 00:57:31
【问题描述】:

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

当我转到localhost:8000/page 时,为什么我的 css 样式没有正确显示?

目录结构

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

myproject/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))

myproject/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> 

myproject/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'
)

【问题讨论】:

    标签: css django web-applications


    【解决方案1】:

    来自django docs

    如果 {{ STATIC_URL }} 在您的模板中不起作用,您可能 渲染模板时不使用 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”。

    【讨论】:

      【解决方案2】:

      也替换

      <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" %}>
      

      应该可以。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-09-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多