Django在Azure上不加载静态文件

问题描述 投票:11回答:5

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

http:/www.windowsazure.comen-usdeveloppythontutorialsweb-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'),
)

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

谢谢!

django azure static
5个回答
17
投票

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

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


5
投票

我在这个页面上找到了我的解决方案。http:/mrtn.meblog20120627running-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>

希望这能帮助到别人!


0
投票

我没有足够的代表投上去,但事实上这个答案对我来说在Azure上也是可行的,而且到目前为止,似乎是唯一的方法。只要记住,web.config需要放在正确的位置......我显然有多个静态文件夹,因为我在尝试不同的解决方法。


0
投票

如果在尝试了所有其他建议的解决方案后,你仍然发现自己的麻烦,你可能要明白,取决于运行你的应用程序的服务器是静态文件的方式服务器。Django有自己的服务器,它是通过使用命令来运行的。

python manage.py runserver

但是PAAS提供商在大多数情况下并不使用这个服务器,在大多数情况下选择的是gunicorn。Azure有时会使用IIS的FastCGI处理程序,但在目前的情况下,它已经足够智能地检测到一个django应用,并尝试使用django的默认服务器。

所以,你要做的第一步是找出azure使用什么服务器来运行你的应用,你可以通过阅读azure的日志来了解。

https:/ YOUR APP NAME.scm.azurewebsites.netapilogstream。

如果你确认azure使用的是django的默认服务器,你必须记住,当在生产环境中,django不会自动服务器静态文件。你必须配置静态文件夹的url。所以在你的configls.py中设置静态文件的url,像这样。

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)

如你所见,我启用了admin,static和media urls。这足以让django的默认服务器知道在哪里找到并提供静态文件(还有媒体文件,以及管理员路径)


-1
投票

是的,我可以确认,在Azure Web Sites上部署Django的静态文件的 "正确位置 "是Web根目录中的 "静态 "目录。

第一步:创建一个名为 static 在你的网站根目录下

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

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

© www.soinside.com 2019 - 2024. All rights reserved.