2012-04-15 48 views
12

Tôi không thể tải các tệp tĩnh của mình từ các mẫu của mình. Tôi đã làm theo các tài liệu chính thức nhưng tôi phải thiếu một cái gì đó.Django không phục vụ các tệp tĩnh, gặp lỗi 404

bố trí thư mục My (tạo ra bởi Django, hầu hết các file bỏ qua):

myproject 
    myproject 
    settings.py 
    urls.py 
    static 
    css 
     bootstrap.css 
     main.css 
    templates 
    base.html 
    myapp1 
    myapp2 
    ... 
    manage.py 

My settings.py:

STATIC_URL = 'static/' 

Tôi đang tham khảo stylesheets của tôi như vậy (từ mẫu của tôi):

{% load staticfiles %} 
<link rel="stylesheet" href="{% static "css/bootstrap.css" %}" type="text/css"> 
<link rel="stylesheet" href="{% static "css/style.css" %}" type="text/css"> 

Điều này cho biết điều này một lần được hiển thị (bằng HTML):

<link rel="stylesheet" href="static/css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="static/css/style.css" type="text/css"> 

Tuy nhiên, các liên kết này không thực sự dẫn đến bất kỳ đâu (khi tôi truy cập chúng tôi nhận lỗi 404 từ Django). Tôi cảm thấy rằng tôi có thể khắc phục điều này bằng cách thêm một cái gì đó trong urls.py, nhưng tôi nghĩ Django đã làm điều này tự động khi bạn chạy máy chủ? Tôi đang thiếu gì?

+2

Thử: 'python manage.py findstatic --verbosity 2 css/styles.css' để xem nơi Django đang tìm kiếm tệp tĩnh của bạn. – deed02392

Trả lời

22

Bạn đã xác định thư mục tệp tĩnh của mình trong settings.py chưa?

Tôi đoán bạn có 'django.contrib.staticfiles', trong các ứng dụng đã cài đặt của mình.

Nếu bạn chưa xác định các tập tin tĩnh của bạn dir, bạn có thể bằng cách làm một cái gì đó như thế này:

import os.path 

PROJECT_ROOT = os.path.abspath(os.path.dirname(__file__)) 

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'), 
) 
+0

Yup Tôi đã tải 'django.contrib.staticfiles' và tôi có' STATIC_URL = '/ static /' 'trong tệp cài đặt của mình. – n0pe

+0

Bạn đã điền vào STATICFILES_DIRS với đường dẫn tuyệt đối vào thư mục tĩnh của bạn chưa? Giống như câu trả lời ở trên để làm. – shadrx

+0

Không! Tôi đã thêm đường dẫn OS tuyệt đối vào thư mục tĩnh của tôi và nó hoạt động. Cảm ơn rất nhiều. – n0pe

1

Tôi nghĩ Django đã thực hiện điều này tự động khi bạn chạy máy chủ?

Tại sao bạn nghĩ vậy? Nếu bạn đã làm theo các tài liệu chính thức, bạn sẽ không tìm thấy điều đó. Đọc những gì bạn phải làm để phục vụ họ trong phát triển here.

Có một vấn đề khác. STATIC_URL của bạn là liên kết tương đối, do đó, trình duyệt thêm URL này vào URL trang hiện có. Vì vậy, nếu bạn đang ở trên trang /foo, 'static/css/style.css' đánh giá là /foo/static/css/style.css'.

Đảm bảo bắt đầu bằng / - tức là /static/ - hoặc là URL đầy đủ, tức là http://myserver.com/static/.

+0

Tôi đang chạy nội bộ này, vì vậy tôi đã thử 'localhost/static /', 'localhost: 8000/static' và'/static/'tất cả với cùng một kết quả. Khi tôi sử dụng phương pháp 'localhost', tôi chỉ cần có một trang' about: blank' từ Chrome. Khi tôi sử dụng '/ static /', tôi đã nhận được 404. – n0pe

+0

Để trả lời liên kết bạn đã cung cấp, tôi đang sử dụng phương thức 'runserver' và tệp của tôi ở STATIC_URL, (theo tài liệu) có nghĩa là nó sẽ tự động . Tôi cũng đã thử nhập mô-đun được đề xuất bởi liên kết và vẫn không có gì. – n0pe

1

Kiểm tra nếu STATICFILES_FINDERS được định nghĩa trong settings.py

https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/#std:setting-STATICFILES_FINDERS

Giá trị mặc định của bạn của STATICFILES_FINDERS là đủ tốt nhưng bạn có 2 lựa chọn:

  • bạn cần phải có các tập tin tĩnh bên trong một ứng dụng và có ứng dụng này trong thư mục INSTALLED_APPS

  • hoặc bạn cần phải xác định STATICFILES_DIRS với con đường của bạn để các tập tin tĩnh nếu mong đợi hành vi là một trong những django.contrib.staticfiles.finders.FileSystemFinder

3

Đây là giải pháp làm việc cho static/media/mẫu truy cập trong django cho các cửa sổ,

settings.py

import os.path 

STATIC_ROOT = '' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
    os.path.join('static'), 
) 
0

Tôi cũng gặp sự cố này. Và tôi đã giải quyết được vấn đề bằng cách sửa đổi href như thế này:

<html> 
<link rel="stylesheet" href="{{STATIC_URL}}css/bootstrap.css" type="text/css"> 
<link rel="stylesheet" href="{{STATIC_URL}}css/style.css" type="text/css"> 
</html> 
3

Vấn đề của tôi đã được giải quyết bằng cách thêm "STATICFILES_DIRS" trong tập tin settings.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (os.path.join('static'),) 
-3

Giải pháp của tôi là DEBUG = True trong cài đặt.

Các vấn đề liên quan