Python 如何在一台vhost上为django和gatsby服务?
我正在尝试在单个域下部署基于gatsby的前端和基于django的后端。它将依赖于Apache和mod_wsgi。在一个完美的世界中,它应该如下所示:Python 如何在一台vhost上为django和gatsby服务?,python,django,apache,gatsby,wsgi,Python,Django,Apache,Gatsby,Wsgi,我正在尝试在单个域下部署基于gatsby的前端和基于django的后端。它将依赖于Apache和mod_wsgi。在一个完美的世界中,它应该如下所示: -盖茨比前端 -django -django 我可以看到两种可能性: Django知道前端。通过Django提供一切,将/设置为静态URL Django不知道前端。通过django提供/api和/admin/由Web服务器处理 我觉得第二种方法更合适,但是我不知道如何为这种场景配置VirtualHost。firstch方法看起来像一个丑陋的黑
- -盖茨比前端
- -django
- -django
/
设置为静态URL/api
和/admin
<代码>/由Web服务器处理我应该如何继续呢?编译完盖茨比项目后,django应该将其作为静态页面提供 第一:盖茨比区应该在你的
静态_private
路径中
第二:在django项目中,您将为/定义一个URL,该URL将调用索引视图
最后:在您的视图中,您应该呈现您的盖茨比区的index.html
URL.py:
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('apis/', include('apps.urls')),
path('/', views.index),
]
views.py:
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
请注意,如果您在前端处理路由,则索引视图的url模式应如下所示:re_path(“^.*$”,views.index)
如果您在heroku上托管django应用程序,则需要whitenoise中间件,并在设置.py
中进行设置:
MIDDLEWARE = [
...
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
这里有一个文档:编译完盖茨比项目后,django应将其作为静态页面提供 第一:盖茨比区应该在你的
静态_private
路径中
第二:在django项目中,您将为/定义一个URL,该URL将调用索引视图
最后:在您的视图中,您应该呈现您的盖茨比区的index.html
URL.py:
from django.contrib import admin
from django.urls import path, re_path, include
from . import views
urlpatterns = [
path('admin/', admin.site.urls),
path('apis/', include('apps.urls')),
path('/', views.index),
]
views.py:
from django.shortcuts import render
def index(request):
return render(request, 'index.html')
请注意,如果您在前端处理路由,则索引视图的url模式应如下所示:re_path(“^.*$”,views.index)
如果您在heroku上托管django应用程序,则需要whitenoise中间件,并在设置.py
中进行设置:
MIDDLEWARE = [
...
'whitenoise.middleware.WhiteNoiseMiddleware',
...
]
此处提供了一个文档:Gatsby build被拆分为多个不同的文件。AFAIK index.html必须位于templates目录中,所有其他gatsby文件必须位于STATIC_根目录中。我必须将静态URL设置为
/
,因为在其他情况下index.html找不到它们。我说得对吗?我不知道你所说的static\u private
是什么意思。在Django,你需要将静态文件放入static\u private
中。py是在设置中定义的,然后存储在STATICFILES\u DIRS
中。关于盖茨比文件,我指的是public
中的生产构建文件,所有这些文件都需要位于django的静态路径中。如果清楚了,请告诉我,我会更新我的答案。您能提供一个示例settings.py文件吗?我仍然无法解决几个不同的问题:re_path(“^.*$”,views.index)将捕获所有内容,包括gatsby静态文件,我无法设置正确的静态_URL=“/”,因为它将与媒体_URL冲突,我不知道如何配置模板和静态文件_dir(gatsby index.html应该属于这两个文件?).你能找到解决办法吗?如果你愿意的话,我们可以聊一聊,也许解释起来会更容易些?盖茨比的构建分为几个不同的文件。AFAIK index.html必须位于templates目录中,所有其他gatsby文件必须位于STATIC_根目录中。我必须将静态URL设置为/
,因为在其他情况下index.html找不到它们。我说得对吗?我不知道你所说的static\u private
是什么意思。在Django,你需要将静态文件放入static\u private
中。py
是在设置中定义的,然后存储在STATICFILES\u DIRS
中。关于盖茨比文件,我指的是public
中的生产构建文件,所有这些文件都需要位于django的静态路径中。如果清楚了,请告诉我,我会更新我的答案。您能提供一个示例settings.py文件吗?我仍然无法解决几个不同的问题:re_path(“^.*$”,views.index)将捕获所有内容,包括gatsby静态文件,我无法设置正确的静态_URL=“/”,因为它将与媒体_URL冲突,我不知道如何配置模板和静态文件_dir(gatsby index.html应该属于这两个文件?).你能找到解决办法吗?如果你愿意的话,我们可以聊一聊,这样会更容易解释,也许吧?