我是新手,请温柔一点。我正在使用 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
删除正斜杠可以完美加载页面:
显然,这是不希望的。我可以使用它,但是任何正斜杠都会发生这种情况,而不仅仅是当它位于正则表达式末尾时。这成为一个问题,因为它还会将当前页面添加到我所有静态文件的开头。
我的问题:为什么常见的中间件不能正确处理正斜杠?我的静态文件服务配置到底有什么问题,上面的方法是我能够让它工作的唯一方法?
最佳答案
如果 STATIC_URL
前面没有斜杠,浏览器会将其视为相对 URL。
正如您在 normalize.css
的屏幕截图中看到的,失败的/church/是您的 STATIC_URL
的前缀。在这些文件正在工作的其他请求中,/church/不存在。
更改:
STATIC_URL = 'MySite/static/'
至
STATIC_URL = '/MySite/static/'
这将导致静态内容的请求永远不会受到 URL 中斜杠的影响,因为它们始终从服务器的根目录开始。
关于python - 正斜杠破坏 URL.py,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20817170/