我已经通过一个函数访问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集成,但我找不到任何有用的资源。有人能帮助我吗?
2条答案
按热度按时间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
。ezykj2lf2#
我知道这太晚了,但Ored的答案是不适用于Nextjs。
当使用React SPA时,所有的react代码都将在客户端的浏览器上运行,当然,在这种情况下,你只需要将React构建工件作为
staticfiles
提供。但是使用SSR的Nextjs,你需要运行Nextjs服务器(使用Nodejs),你应该集成这两个服务器(Django和Nextjs)一起工作。
所以,如果你正在开始一个新的项目,你应该只使用Django作为一个Web服务,让Nextjs成为你的应用程序的接口,但是如果你已经有一个Django应用程序,并希望使用Nextjs,请查看以下文章和GitHub repo: