我是新手请温柔。我正在使用Nitrous.io和Django 1.5。我正在经历一些奇怪的事情,并正在寻找一些解释。我不确定这是一件中间件还是我的新生派造成的问题(我的钱是我的新生儿)。对不起蓝色的波浪形我不知道这个政策是什么政策。
这是我的urls.py:
urlpatterns = patterns('',
url(r'^church$', church),
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
在您告诉我我不需要添加静态片段之前请注意,这是我可以正确提供静态文件的唯一方法。
这是我的settings.py的相关部分:
DEBUG = True
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'StructureBuilder', #this is the name of my app
'django.contrib.admin',
)
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
STATIC_ROOT = os.path.join(os.path.dirname(__file__), 'static')
STATIC_URL = 'MySite/static/'
在您告诉我STATIC_URL
错误或我不需要STATIC_ROOT
之前,请注意这是我能够正确提供静态文件的唯一方法。
这就是:
如果我向我的urlpatterns添加正斜杠,例如url(r'^church/$', church),
,则正则表达式会检出但是我的静态文件都没有加载。
如果我删除前锋斜杠(例如。url(r'^church$', church),
并重新加载页面,我会因为正斜杠而得到404错误。我的印象是普通的中间件(我已安装)处理了正斜杠Link
删除正斜杠会完美地加载页面:
显然,这不是理想的。我可以使用它,但这种情况发生在任何正斜杠上,而不仅仅是在正则表达式结束时。这成为一个问题,因为它还会将当前页面添加到所有静态文件的开头。
我的问题:为什么常见的中间件无法正确处理正斜杠?我的静态文件服务配置究竟出了什么问题,以上方式是我能够让它工作的唯一方法?
答案 0 :(得分:4)
在STATIC_URL
前面没有斜杠,浏览器会将其视为相对网址。
正如您在normalize.css
屏幕截图中看到的那样,失败/教会/以STATIC_URL
为前缀。在这些文件正在工作的其他请求中,/ church /不存在。
变化:
STATIC_URL = 'MySite/static/'
到
STATIC_URL = '/MySite/static/'
这将导致静态内容的请求永远不会受到URL中斜杠的影响,因为它们将始终从服务器的根目录开始。