我通过简单的服务器在本地为Django提供静态文件。我的urls.py中包含以下行:
static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
(奖励指向任何能告诉我为什么这不会被网址解析器自动检查的人。我有django.contrib.staticfiles安装并将DEBUG设置为True)。
如果我们看一下static的实现,我们发现一个非常简单的函数:
if not settings.DEBUG or (prefix and '://' in prefix):
return []
elif not prefix:
raise ImproperlyConfigured("Empty static prefix not permitted")
return patterns('',
url(r'^%s(?P<path>.*)$' % re.escape(prefix.lstrip('/')), view, kwargs=kwargs),
)
最后一行最终会添加到我的网址模式中。
当我运行Web服务器时,它没有正确地提供来自该STATIC_ROOT的文件。这是一个例子:
我在浏览器中输入以下内容:localhost:8000 / Users / nick / Documents / coding / sparestub / static_root / contact / js / contact.js
以下是服务器响应:
Request Method: GET
Request URL: http://localhost:8000/Users/nick/Documents/coding/sparestub/static_root/contact/js/contact.js
Using the URLconf defined in sparestub.urls, Django tried these URL patterns, in this order:
^$ [name='homepage']
^registration/
^Users\/nick\/Documents\/coding\/sparestub\/sparestub\/\.\.\/static_root\/(?P<path>.*)$
请注意,我们正在正确搜索STATIC_ROOT。如果我将url复制并粘贴到bash中,它会找到目录:
Nick-MacBook-Pro:Documents nick$ cd /Users\/nick\/Documents\/coding\/sparestub\/sparestub\/\.\.\/static_root\/
Nick-MacBook-Pro:static_root nick$ pwd
/Users/nick/Documents/coding/sparestub/static_root
Nick-MacBook-Pro:static_root nick$ cd /Users\/nick\/Documents\/coding\/sparestub\/sparestub\/\.\.\/static_root\/
Nick-MacBook-Pro:static_root nick$ pwd
/Users/nick/Documents/coding/sparestub/static_root
Nick-MacBook-Pro:static_root nick$ cd contact/js
Nick-MacBook-Pro:js nick$ ls
contact.js
请注意它包含/contact/js/contact.js !!
在contact / js / contact.js看到匹配RE模式(?P. *),我希望这整个过程都能正常工作。任何人都可以提供一些指导吗?