【问题标题】:Django stylesheet will not loadDjango 样式表不会加载
【发布时间】:2015-02-26 20:09:39
【问题描述】:

我已经阅读了关于静态文件的无限线程以及所有似乎发生的问题,但没有任何东西可以解决我的问题。我昨天花了很多时间让我的“媒体”文件夹工作,但我似乎无法让静态文件工作。

我的模板在文件的正确位置查找,文件在那里,但是当模板尝试加载它时我得到 404。

这是我的 settings.py:

STATIC_PATH = os.path.join(BASE_DIR, 'static')
STATICFILES_FINDERS = ( 
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

MEDIA_URL = '/media/' 
MEDIA_ROOT = 'public/media/' 
STATIC_URL = '/static/' 
# STATIC_ROOT = 'public/static/'
STATIC_DIRS = (
    STATIC_PATH,
)

base.html

<!DOCTYPE html>

<html>
    <head lang="en">
        <meta charset="UTF-8">
        <title>Address Book</title>
        <link rel="stylesheet" type="text/css" href="{{STATIC_URL}}address_book/stylesheets/1.css"
    </head>
        {% if user.is_authenticated %}
        <h1>Hello {{ user.username }}!</h1>
        {% else %}
        <h1>Please login below</h1>
        {% endif %}
    <body>
        {% block body_block %}{% endblock %}
    </body>

    <h2> Need to make changes? </h2>
    <ul>
        <li><a href="{% url 'index' %}">Go home</a></li>
        {% if user.is_authenticated %}
        <li><a href="{% url 'logout' %}">Logout</a></li>
        <li><a href="{% url 'add_client' %}">Add new client</a></li>
        {% else %}
        <li><a href="{% url 'login' %}">Login</a></li>      
        <li><a href="{% url 'register' %}">Register here</a></li>  
        {% endif %}
    </ul>

urls.py

from django.conf.urls import patterns, url
from address_book import views
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns

urlpatterns = patterns('',
        url(r'^$', views.index, name='index'),
        url(r'^add_client/$', views.add_client, name='add_client'),
        url(r'^register/$', views.register, name = 'register'),
        url(r'^login/$', views.user_login, name='login'),
        url(r'^logout/$', views.user_logout, name='logout'),
        url(r'^(?P<client_name_slug>[\w\-]+)/$', views.client, name='client'),
)


# Serve media files only in development
if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
   )
    urlpatterns += patterns('', (
        r'^static/(?P<path>.*)$',
        'django.views.static.serve',
        {'document_root': 'static'}
))
else:
    print "no server is configured to serve media files. Do it now."


    </html>

【问题讨论】:

  • DEBUG 是否设置为 False? Django 不在调试模式下运行时不提供静态文件。请参阅this question 了解更多信息
  • 您的浏览器试图提供什么路径以及应该提供什么路径?
  • DEBUG 设置为 True。浏览器正在尝试提供正确的文件夹“href="/static/address_book/stylesheets/1.css",但它仍然显示 404

标签: python django stylesheet static-files


【解决方案1】:

您应该删除 urls.py 中的条目。提供静态文件所需的内容如下:

在我的 settings.py 中:

DEBUG = True

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'myprojectname/static'),
)

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.7/howto/static-files/

STATIC_URL = '/static/'

在我的模板中:

{% load staticfiles %}

<script type="text/javascript" src="{% static 'raphael-min.js' %}"></script>

文件的位置是./myprojectname/static/raphael-min.js IE /home/username/djangoProjects/myprojectname/myprojectname/static/raphael-min.js

【讨论】:

  • 这个答案是正确的,但它并没有突出实际问题,即 OP 使用的是STATIC_DIRS 而不是STATICFILES_DIRS
猜你喜欢
  • 2014-07-14
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2022-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
相关资源
最近更新 更多