2011-08-16 44 views
8

Tôi cố gắng để hiểu được cấu trúc tĩnh django 1.3 cố gắng để theo đuổi:Django cấu trúc tĩnh

Tôi có một dự án với cấu trúc này:

Project 
    someapp 
     static 
      someapp 
      css 
      etcetera 
     models.py 
     views.py 
     urls.py 
    urls.py 
    manage.py 
    settings.py 

Bây giờ tôi muốn ghi đè lên các admin django .. Vì vậy, tôi phải thiết lập các thiết lập trong settings.py mà tôi đã làm như dưới đây (basepath là con đường tắt vào thư mục hiện hành):

# Absolute path to the directory static files should be collected to. 
# Don't put anything in this directory yourself; store your static files 
# in apps' "static/" subdirectories and in STATICFILES_DIRS. 
# Example: "/home/media/media.lawrence.com/static/" 
STATIC_ROOT = BASE_PATH+'/static/' 

# URL prefix for static files. 
# Example: "http://media.lawrence.com/static/" 
STATIC_URL = '/static/' 

# URL prefix for admin static files -- CSS, JavaScript and images. 
# Make sure to use a trailing slash. 
# Examples: "http://foo.com/static/admin/", "/static/admin/". 
ADMIN_MEDIA_PREFIX = '/static/admin/' 

# Additional locations of static files 
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
) 

Nếu tôi sử dụng lệnh collectstatic manage.py, nó Colle cts tất cả các file tĩnh (bao gồm cả các tập tin quản trị) trong một thư mục 'tĩnh' như mong đợi ... (trong dir dự án chính)

Tuy nhiên nội dung của nó không phục vụ được nêu ra cho đến khi tôi thêm rằng thư mục vào tuple STATICFILES_DIRS, tuy nhiên sau đó tôi phải thay đổi cài đặt thư mục STATIC_ROOT vì nếu không tôi sẽ bị lỗi vì chúng không thể giống nhau ...

Tôi nghĩ rằng tôi đang nhìn rõ ràng bởi vì những gì tôi phải làm để làm cho nó hoạt động có vẻ dư thừa

+1

Vì vậy, .. bạn đã đặt các thư mục tệp của bạn thực sự được lưu trữ vào trong 'STATIC_DIRS' và trỏ' STATIC_ROOT' vào thư mục __empty__ nơi Django có thể thu thập các tệp tĩnh? – agf

Trả lời

-5

Cách thực hiện:

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    STATIC_ROOT, 
) 
+1

Không có chính xác phần bị lỗi ... Không đúng cấu hình: Cài đặt STATICFILES_DIRS không được chứa cài đặt STATIC_ROOT – RoundTripToNowhere

+0

Điều này làm tăng ngoại lệ với tùy chọn này một cách rõ ràng! –

4

STATICFILES_DIRS là cài đặt bạn sử dụng để khai báo các tệp tĩnh không phải ứng dụng cụ thể trong dự án của bạn. STATIC_ROOT là nơi các tệp tĩnh được đặt khi chúng được thu thập.

Từ django's docs:..

"Dự án của bạn sẽ có lẽ cũng có tài sản tĩnh mà không được gắn với một ứng dụng cụ thể Thiết lập STATICFILES_DIRS là một tuple các thư mục hệ thống tập tin để kiểm tra khi tải các tập tin tĩnh Đó là một đường dẫn tìm kiếm đó là theo mặc định trống. Xem tài liệu STATICFILES_DIRS cách mở rộng danh sách các đường dẫn bổ sung này. "

"Đặt cài đặt STATIC_ROOT để trỏ đến đường dẫn hệ thống tệp bạn muốn các tệp tĩnh được thu thập khi bạn sử dụng lệnh quản lý tập hợp."

10

Đối với phát triển địa phương, hãy thử cấu trúc này

Project 
    Project (project directory with settings.py etc..) 
     stylesheets 
    someapp 
    static 
     base.css 

Với điều này trong settings.py:

import os 
ROOT_PATH = os.path.dirname(__file__) 
STATIC_ROOT = os.path.join(ROOT_PATH, 'static') 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(ROOT_PATH, 'stylesheets'), 
) 

Chạy máy chủ nội bộ với python manage.py runserver và đi đến http://localhost:8000/static/base.css

Bạn sẽ thấy stylesheet.