有没有一种方法可以将Django与Next.js集成在一起?

9w11ddsr  于 11个月前  发布在  Go
关注(0)|答案(2)|浏览(153)

我已经通过一个函数访问build/index.html将Reactjs与Django集成在一起。下面的代码展示了我是如何做到的。

config/urls.py

urlpatterns = [
    ...
    re_path(r'search/', react_views.ReactAppView.as_view()),
]

字符串

项目名称/views.py

class ReactAppView(View):

    def get(self, request):
        try:
            with open(os.path.join(str(settings.BASE_DIR), 'frontend', 'build', 'index.html')) as file:
                return HttpResponse(file.read())
        except:
            return HttpResponse(
                """
                Build your React app.
                """,
                status=501,
            )


ReactAppView函数访问在React端用yarn build创建的index.html。基本上,我只使用React来搜索视图,而不是搜索视图,我使用的是jQuery,因为它首先是用jQuery开发的。
自从我发现我需要Next.js来使用React的服务器端渲染(SSR),我一直试图将React应用迁移到Next.js。但是,Next.js没有index.html。它只有pages/index.js
我已经很努力地想弄清楚如何将Django与Next.js集成,但我找不到任何有用的资源。有人能帮助我吗?

gblwokeq

gblwokeq1#

看起来你想提供静态文件(即React或Next.js包)。Django有一个关于如何做到这一点的指南(通过django.contrib.staticfiles
最简单的例子(直接来自文档)是:

  • 设置STATIC_FILES文件夹:

STATIC_URL = '/static/'

  • index.html文件放在那里,并将其引用为/static/index.html

有关staticfiles的更多信息,请参阅官方文档:https://docs.djangoproject.com/en/4.0/howto/static-files/
在Next.js方面,您需要按照https://nextjs.org/docs/advanced-features/static-html-export的示例操作,或者手动创建一个包含您正在使用的所有next.js包的index.html

ezykj2lf

ezykj2lf2#

我知道这太晚了,但Ored的答案是不适用于Nextjs。
当使用React SPA时,所有的react代码都将在客户端的浏览器上运行,当然,在这种情况下,你只需要将React构建工件作为staticfiles提供。
但是使用SSR的Nextjs,你需要运行Nextjs服务器(使用Nodejs),你应该集成这两个服务器(Django和Nextjs)一起工作。
所以,如果你正在开始一个新的项目,你应该只使用Django作为一个Web服务,让Nextjs成为你的应用程序的接口,但是如果你已经有一个Django应用程序,并希望使用Nextjs,请查看以下文章和GitHub repo:

相关问题