【问题标题】:How do I serve static files and dynamic files in Django 1.3 development urls?如何在 Django 1.3 开发 url 中提供静态文件和动态文件?
【发布时间】:2011-06-22 19:48:38
【问题描述】:

我有点难过。在开发中,我试图在 DJango 1.3 中为我的应用程序提供静态和动态文件。我喜欢新的静态功能,但我似乎无法让它正常工作。

当我阅读文档时,看起来以下内容应该有效。它提供动态的东西很好,但不是静态的。

urlpatterns += staticfiles_urlpatterns()

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

【问题讨论】:

  • 只是为了澄清。这确实有效。问题是我在设置中手动设置了导致问题的 STATIC_URL。
  • 为此问题添加答案并接受它。
  • 我早些时候尝试过,但它不会让我这样做。现在就这样做。

标签: django django-urls django-static


【解决方案1】:

在 django 1.3 中,静态和动态内容已经分离。要使用新功能,请像这样设置您的项目:

project
 |- app1
 |- media       # exists only on server/folder for dynamic content
 |- static-root # exists only on server/folder for static content
 |- static      # folder for site-specific static content
 |- settings.py
 |- manage.py
 `- urls.py

settings.py

​​>
from os import path
PROJECT_ROOT = path.dirname(path.abspath(__file__)) #gets directory settings is in

#-- dynamic content is saved to here --
MEDIA_ROOT = path.join(PROJECT_ROOT,'media')
MEDIA_URL  = '/media/'

#-- static content is saved to here --
STATIC_ROOT = path.join(PROJECT_ROOT,'static-root') # this folder is used to collect static files in production. not used in development
STATIC_URL =  "/static/"
ADMIN_MEDIA_URL = STATIC_URL + 'admin/' #admin is now served by staticfiles
STATICFILES_DIRS = (
    ('site', path.join(PROJECT_ROOT,'static')), #store site-specific media here.
)

#-- other settings --
INSTALLED_APPS = (
    ...
    'django.contrib.staticfiles',
    ...
)

urls.py

​​>
from django.conf import settings

#your URL patterns

if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns() #this servers static files and media files.
    #in case media is not served correctly
    urlpatterns += patterns('',
        url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
            'document_root': settings.MEDIA_ROOT,
        }),
    )

【讨论】:

  • 几乎对我有用。我不得不将 PROJECT_ROOT+'site-static' 更改为 PROJECT_ROOT+'/site-static'。
  • 如何在此设置中包含项目范围的样式和图像?我想使用 STATICFILES_DIRS,但是您如何在模板中引用这些?
  • 嗯,可能只是使用 {{ STATIC_URL }} 但您将如何在自定义管理模板中加载管理静态文件?
【解决方案2】:

从settings.py查看STATIC_URL,值是多少?

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 2012-03-25
    • 2012-06-04
    • 2012-01-26
    • 2013-12-22
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-01
    相关资源
    最近更新 更多