Azure上的Django没有加载静态文件

时间:2013-09-14 07:07:44

标签: django azure static

我按照下面的教程在azure上创建了一个django项目:

http://www.windowsazure.com/en-us/develop/python/tutorials/web-sites-with-django/

在我尝试安装django_admin_bootstrapped应用程序之前,一切正常。现在所有静态请求都返回404错误。如果新的应用程序导致问题或者只是暴露它,我不会。

我有这个:

STATIC_ROOT = ''

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = '/static/'

# Additional locations of static files
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    #os.path.join(PROJECT_DIR, 'site-packages/django_admin_bootstrapped/static'),
)

我在网上看了很多,有些人说你必须配置你的服务器来提供静态文件。我没有直接访问服务器,它是一个天蓝色的网站,我通过git部署。就像我说的那样,在我尝试安装引导管理员的这些应用之前,管理员和所有工作都已经完成了。现在,即使应用程序不在INSTALLED_APPS下,我也没有获得任何css或js文件。

谢谢!

5 个答案:

答案 0 :(得分:16)

我遇到了这个问题,并且没有一个建议的答案似乎合适。我奇怪的解决方案是在Azure网站配置页面上关闭 Python。

我通过安装PTVS Django示例并按照本教程http://azure.microsoft.com/en-us/documentation/articles/web-sites-python-ptvs-django-sql/中的步骤得出了这个奇怪的结论。我的网站和工作教程之间唯一的区别就是Django关闭了!如果有人有解释我很乐意听到它(PHP已启用!!!)。

答案 1 :(得分:5)

我在此页面上找到了我的解决方案:http://mrtn.me/blog/2012/06/27/running-django-under-windows-with-iis-using-fcgi/

我必须创建一个中央静态文件夹,并为iis添加web.config来提供文件。 web.config如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <!-- this configuration overrides the FastCGI handler to let IIS serve the static files -->
    <handlers>
    <clear/>
      <add name="StaticFile" path="*" verb="*" modules="StaticFileModule" resourceType="File" requireAccess="Read" />
    </handlers>
  </system.webServer>
</configuration>

希望这有助于某人!

答案 2 :(得分:0)

我没有足够的代表进行投票,但事实上答案确实也适用于我,而且到目前为止,它似乎是唯一可行的方法。请记住,web.config需要在正确的位置...大声笑......我显然有多个静态文件夹,因为我尝试了不同的解决方法。

答案 3 :(得分:0)

是的,我可以确认,为Azure网站上的Django部署存储静态文件的“正确位置”是Web根目录中的“静态”目录。

步骤1:在您的Web根目录(www root)中创建名为static的目录

第2步:编辑Django的settings.py并设置STATIC_ROOT = 'D:/home/site/wwwroot/static'

第3步:在模板中使用构造{% static "static_file_name" %}

答案 4 :(得分:0)

如果在尝试了所有其他提议的解决方案之后仍然遇到麻烦,则可能必须了解,取决于运行应用程序的服务器,静态文件是服务器的方式。 Django拥有自己的服务器,该服务器使用以下命令运行:

python manage.py runserver

但是,在大多数情况下,PAAS提供程序不使用此服务器。在大多数情况下,gunicorn都是首选。 Azure有时会使用IIS的FastCGI处理程序,但目前它足够智能,可以检测django应用程序并尝试使用django的默认服务器。

因此,您要做的第一步是找出运行Azure的服务器来运行您的应用程序,并且通过阅读Azure的日志可以知道这一点:

https://您的应用程序名称.scm.azurewebsites.net / api / logstream

如果确认azure使用的是django的默认服务器,则必须记住,在生产环境中django不会自动为静态文件提供服务器。您必须配置静态文件夹的URL。因此,在您的config / urls.py中设置静态网址,如下所示:

from django.conf import settings
from django.conf.urls.i18n import i18n_patterns
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import include, path

urlpatterns = i18n_patterns(path('admin/', admin.site.urls), prefix_default_language=False) + \
    static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + \
    static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

如您所见,我启用了管理,静态和媒体URL。这足以让django的默认服务器知道在哪里可以找到并提供静态文件(以及媒体文件以及管理路由)