【问题标题】:django-cms not routing properly to static url?django-cms 没有正确路由到静态 url?
【发布时间】:2011-12-18 06:50:11
【问题描述】:

我对 Django 还比较陌生,刚刚开始研究 Django-CMS,但是,我无法通过 official docs 的基本介绍。

我的问题可能与sekizai有关,但感觉是urls.py中的基本url问题。

基本上,我几乎完全按照教程进行了操作。唯一的区别是我的 cms 应用程序位于 blog/ 下,完整路径为 ~/workspace/djangocms/blog/。我已经在 settings.py 下正确设置了STATIC_URLSTATIC_ROOT,我的MEDIA_URLMEDIA_ROOT 也是如此。

我调出媒体路径和目录,因为如果我将基本模板设置为链接到 {{ MEDIA_URL }}css/somecss.min.css 的 css,它就可以正常工作。但是,对 STATIC_URL:{{ STATIC_URL }}css/somecss.min.css 执行相同操作不起作用并产生 404。

此外,据我所知,默认 /static/ 路由似乎适用于其他目录。 {% cms_toolbar %} 生成的代码可以从 /static/cms/css/plugins/cms.toolbar.css 等位置生成正常的 css。

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

【问题讨论】:

    标签: django-cms


    【解决方案1】:

    在遵循相同的教程后,我反复解决了这个问题。

    我的网站会加载标准的欢迎页面,我可以创建 CMS 页面。但是,当我尝试在模板中加载静态文件时,我不断收到 404 错误。

    OP给出的答案对我帮助很大。

    需要明确的是,这对我有用:

    1. 将项目中的静态目录重命名为 local_static

    2. 将以下内容添加到 settings.py

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

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

    这对我有用。我现在可以停止拔头发了

    【讨论】:

      【解决方案2】:

      从 freenode 上的#django 得到我的答案。在这里自己回答,以防有人需要:

      主要用于django-cms,STATIC_ROOT主要用于生产时来自django-cms本身的资产。如果 django 正在使用python manage.py runserver 方法运行,则 STATIC_ROOT 无关紧要。

      From the Django docs:使用collectstatic 收集所有使用的静态资产(对于 django-cms,它可能位于 /usr/local/lib/python##/dist-packages 之类的目录下)。这显示了 STATIC_ROOT 将在生产期间使用哪些文件。

      如果您想使用 STATIC_URL 提供其他目录,则必须将它们添加到 settings.pySTATICFILES_DIRS 部分。 (确保阅读 cmets - 使用绝对路径而不是相对路径)。这在制作纯 Django 应用程序时实际上是相对明显的,但是,因为我想严格遵循 Django-cms 教程,这并不像应有的那么明显。

      【讨论】:

        【解决方案3】:

        解决方案太简单了,我也错过了。

        来自settings.py;

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

        如果您查看“mysitename”内部,则有另一个名为“static”的文件夹。如果您将文件放在那里,一切都会按照您的预期进行。与 manage.py 处于同一级别的“静态”文件夹是一个红鲱鱼。

        【讨论】:

          【解决方案4】:

          我发布了相同的答案here,但我遇到了同样的问题。虽然我能够为其他所有内容提供静态文件,但由于某种原因,我的 django-cms 文件一直返回 404。我检查了 settings.py 和权限,但运气不佳。

          在运行 Nginx 和 Gnicion 的 Ubuntu 14.04 上,我可以通过编辑来解决问题:

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

          我添加了以下代码块

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

          然后我重启了 Nginx 和 Gunicorn

          sudo service nginx restart && sudo service gunicorn restart
          

          我能够看到所有丢失的静态文件

          【讨论】:

            猜你喜欢
            • 2020-08-07
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-01-26
            • 2016-05-22
            • 2016-09-30
            • 2020-07-29
            • 2018-04-03
            相关资源
            最近更新 更多