2

我是新手请温柔。我正在使用 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 错误。我的印象是普通中间件(我已经安装)处理了正斜杠链接

在此处输入图像描述

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

在此处输入图像描述

在此处输入图像描述

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

我的问题:为什么常见的中间件不能正确处理正斜杠?我的静态文件服务配置到底有什么问题,上述方式是我能够让它工作的唯一方法?

4

1 回答 1

4

如果您的浏览器前面没有斜线,STATIC_URL则将其视为相对 URL。

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

改变:

STATIC_URL = 'MySite/static/'

STATIC_URL = '/MySite/static/'

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

于 2013-12-28T17:55:45.070 回答