11

我按照下面的教程在 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 文件。

谢谢!

4

5 回答 5

17

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

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

于 2015-01-22T20:27:41.190 回答
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>

希望这对某人有帮助!

于 2013-09-14T19:46:32.583 回答
0

我没有足够的代表来投票,但实际上答案对我也适用于 Azure,而且似乎是迄今为止唯一的方法。请记住,web.config 需要在正确的位置...大声笑...我显然有多个静态文件夹,因为我正在尝试不同的方法来解决这个问题。

于 2014-04-08T17:20:34.560 回答
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 中设置静态 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)

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

于 2020-05-16T18:28:45.400 回答
-1

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

static第 1 步:在您的 Web 根目录(www 根目录)中创建一个目录

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

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

于 2014-05-08T18:50:41.497 回答