2011-12-18 24 views
6

Tôi vẫn còn tương đối mới đối với Django và vừa mới bắt đầu thu hút xung quanh tại Django-CMS, tuy nhiên, tôi không thể vượt qua giới thiệu cơ bản từ số official docs.django-cms không định tuyến chính xác đến url tĩnh?

Sự cố của tôi có thể liên quan đến sekizai, nhưng có vẻ như đó là vấn đề url cơ bản trong url.

Về cơ bản, tôi đã làm theo hướng dẫn gần như chính xác. Sự khác biệt duy nhất là tôi có ứng dụng cms của tôi dưới blog /, đường dẫn đầy đủ ~/workspace/djangocms/blog /. Tôi đã đặt STATIC_URLSTATIC_ROOT đúng theo settings.py và cùng với MEDIA_URLMEDIA_ROOT của tôi.

Tôi đưa lên đường dẫn và thư mục phương tiện vì nếu tôi đặt mẫu cơ sở của mình thành liên kết tới css tại {{ MEDIA_URL }}css/somecss.min.css thì nó hoạt động tốt. Tuy nhiên, làm tương tự với STATIC_URL: {{ STATIC_URL }}css/somecss.min.css không hoạt động và tạo ra 404.

Ngoài ra, từ những gì tôi có thể biết, các tuyến mặc định/tĩnh/dường như hoạt động tốt cho các thư mục khác. Mã được tạo ra bởi {% cms_toolbar %} tạo ra tiền phạt và css từ những nơi như /static/cms/css/plugins/cms.toolbar.css đang được phân phát đúng cách.

Nội dung urls.py

from django.conf.urls.defaults import *           
from django.contrib import admin 
from django.conf import settings 

admin.autodiscover() 

urlpatterns = patterns('', 
    # Examples: 
    # url(r'^$', 'blog.views.home', name='home'), 
    # url(r'^blog/', include('blog.foo.urls')), 

    # Uncomment the admin/doc line below to enable admin documentation: 
    # url(r'^admin/doc/', include('django.contrib.admindocs.urls')), 

    # Uncomment the next line to enable the admin: 
    # url(r'^admin/', include(admin.site.urls)), 
    (r'^admin/', include(admin.site.urls)), 
    url(r'^', include('cms.urls')), 
) 
if settings.DEBUG: 
    urlpatterns = patterns('', 
     url(r'^media/(?P<path>.*)$', 'django.views.static.serve', 
     {'document_root': settings.MEDIA_ROOT, 
     'show_indexes': True}), 
     url(r'', 
     include('django.contrib.staticfiles.urls')), 
    ) + urlpatterns 

Trả lời

6

Got câu trả lời của tôi từ #django trên freenode. Tự trả lời nó ở đây trong trường hợp ai đó cần nó:

Chủ yếu cho django-cms, STATIC_ROOT chủ yếu được sử dụng cho tài sản từ chính django-cms trong quá trình sản xuất. Nếu django đang được chạy bằng phương pháp python manage.py runserver, STATIC_ROOT không liên quan.

From the Django docs: Sử dụng collectstatic để thu thập tất cả các nội dung tĩnh được sử dụng (dành cho django-cms có thể nằm trong thư mục như/usr/local/lib/python ##/dist-packages). Điều này cho thấy các tệp STATIC_ROOT sẽ sử dụng trong quá trình sản xuất.

Nếu bạn muốn phục vụ các thư mục khác với STATIC_URL, bạn sẽ phải thêm chúng vào phần STATICFILES_DIRS của settings.py. (Hãy chắc chắn để đọc các ý kiến ​​- sử dụng các đường dẫn tuyệt đối và không phải đường dẫn tương đối). Điều này thực sự tương đối rõ ràng khi tạo một ứng dụng Django thuần túy, tuy nhiên, bởi vì tôi muốn tuân thủ nghiêm ngặt hướng dẫn của Django-cms, điều này không rõ ràng như nó đã từng xảy ra.

8

Tôi đã đi vòng quanh với vấn đề này sau khi làm theo hướng dẫn tương tự.

Trang web của tôi sẽ tải trang chào đón chuẩn và tôi có thể tạo trang CMS. Tuy nhiên, khi tôi cố tải các tệp tĩnh trong các mẫu của mình, tôi vẫn gặp phải lỗi 404.

Câu trả lời do OP cung cấp đã giúp tôi rất nhiều.

Chỉ cần được rõ ràng, điều này đã làm việc cho tôi:

  1. Đổi tên thư mục tĩnh trong dự án để cái gì đó như local_static

  2. Thêm dòng sau để cài đặt.py

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

STATICFILES_DIRS = ( os.path.join(PROJECT_PATH, "local_static/"), )

này đã làm việc cho tôi. Bây giờ tôi có thể ngừng kéo tóc ra

0

Tôi đã đăng câu trả lời tương tự here, nhưng tôi đã gặp phải cùng một vấn đề. Trong khi tôi đã có thể phục vụ các tập tin tĩnh cho tất cả mọi thứ khác, vì một số lý do tập tin django-cms của tôi giữ lại một 404. Tôi đã kiểm tra settings.py và quyền nhưng tôi không có nhiều may mắn.

Trên Ubuntu 14.04 chạy Nginx và Gunicion tôi như thể để giải quyết vấn đề bằng cách chỉnh sửa:

sudo nano /etc/nginx/sites-enabled/django 

Và tôi đã thêm khối mã sau

location /static/cms { 
    alias /usr/local/lib/python2.7/dist-packages/cms/static/cms/; 
} 

Sau đó, tôi khởi động lại Nginx và Gunicorn

sudo service nginx restart && sudo service gunicorn restart 

và tôi có thể xem tất cả các tệp tĩnh bị thiếu

1

Giải pháp đơn giản đến nỗi tôi cũng bỏ lỡ nó.

từ settings.py;

STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mysitename', 'static'), 
) 

Nếu bạn nhìn vào bên trong 'mysitename' thì có một thư mục khác có tên 'tĩnh'. Nếu bạn đặt các tệp của mình ở đó, mọi thứ sẽ hoạt động như bạn mong đợi. Thư mục 'tĩnh' trong cùng cấp như manage.py là một cá trích đỏ.

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