【问题标题】:Django: Migrating from MEDIA_URL to STATIC_URLDjango:从 MEDIA_URL 迁移到 STATIC_URL
【发布时间】:2012-08-18 16:20:43
【问题描述】:

从 Django 1.3 开始,引入了 STATIC_URL 的概念来将使用媒体文件与 css 和 js 文件分开。

我已经设置了我的STATIC_ROOT = '/home/user/project/static/' 和 STATIC_URL = '/static/'.

在我的 base.html 中,我改变了这样的路径:

<link href="{{ STATIC_URL }}bootstrap/css/bootstrap.min.css" rel="stylesheet">

在url.py 中我添加了以下两行:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns
...
urlpatterns += staticfiles_urlpatterns()

我的视图使用 RequestCONtext 呈现模板:

return render(request, 'main_page.html', variables)

但在开发过程中,运行 runserver 时我仍然得到 404。

[18/Aug/2012 17:12:04] "GET /static/jquery/jquery-1.8.0.min.js HTTP/1.1" 404 1682

我可能会错过什么?

【问题讨论】:

    标签: django


    【解决方案1】:

    settings.py

    PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
    
    MEDIA_ROOT = os.path.join(PROJECT_DIR, 'site_media')
    MEDIA_URL = '/site_media/'
    STATIC_URL = '/static/'
    
    if DEBUG:
        STATIC_ROOT = os.path.join(PROJECT_DIR, 'static')
    else:
        STATICFILES_DIRS = (
            os.path.join(PROJECT_DIR, 'static'),
        )
    

    urls.py

    if settings.DEBUG:
        urlpatterns += patterns('',
            url(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
            url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.STATIC_ROOT}),
        ) 
    

    应该可以的:)

    【讨论】:

    • 谢谢埃夫林。关键是我必须将 STATICFILES_DIRS 设置为物理静态文件,同时将静态文件的实际路径留空,因为稍后将由 manage.py 收集。令人困惑... :)
    • 你能指出static目录应该放在哪里吗?应该是 /&lt;project_name&gt;/&lt;project_name&gt;/ 之类的东西还是其他地方?
    • 是否需要collectstatic?
    • 本地开发需要一些STATICFILES_FINDERS 设置吗?
    • 好的。更多信息在这里:docs.djangoproject.com/en/dev/howto/static-files
    猜你喜欢
    • 2012-09-03
    • 2012-01-21
    • 2012-12-03
    • 2023-03-12
    • 1970-01-01
    • 2016-03-30
    • 2017-02-14
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多