Forward Slash Breaking Url.py

时间:2013-12-28 17:11:43

标签: python django nitrousio

我是新手请温柔。我正在使用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),,则正则表达式会检出但是我的静态文件都没有加载。

enter image description here enter image description here

如果我删除前锋斜杠(例如。url(r'^church$', church),并重新加载页面,我会因为正斜杠而得到404错误。我的印象是普通的中间件(我已安装)处理了正斜杠Link

enter image description here

删除正斜杠会完美地加载页面:

enter image description here

enter image description here

显然,这不是理想的。我可以使用它,但这种情况发生在任何正斜杠上,而不仅仅是在正则表达式结束时。这成为一个问题,因为它还会将当前页面添加到所有静态文件的开头。

我的问题:为什么常见的中间件无法正确处理正斜杠?我的静态文件服务配置究竟出了什么问题,以上方式是我能够让它工作的唯一方法?

1 个答案:

答案 0 :(得分:4)

STATIC_URL前面没有斜杠,浏览器会将其视为相对网址。

正如您在normalize.css屏幕截图中看到的那样,失败/教会/以STATIC_URL为前缀。在这些文件正在工作的其他请求中,/ church /不存在。

变化:

STATIC_URL = 'MySite/static/'

STATIC_URL = '/MySite/static/'

这将导致静态内容的请求永远不会受到URL中斜杠的影响,因为它们将始终从服务器的根目录开始。