使用django-nextjs渲染Next.js页面时出现ERR_TOO_MANY_REDIRECTS错误
解决Django-Next.js整合中/about/页面的重定向循环问题
问题原因
你的路由配置存在重复定义,且自定义视图调用render_nextjs_page_sync时未指定对应页面路径,导致Django与Next.js之间触发无限重定向:
- 你通过
path("", include("django_nextjs.urls"))引入了django-nextjs的自动路由,它会代理所有Next.js页面的请求 - 之后又手动定义了
index和about视图,与自动路由产生冲突 - 访问
/about/时,自定义视图调用render_nextjs_page_sync但未指定page参数,Next.js无法正确匹配页面,返回重定向进而形成循环
解决方法
方法1:使用django-nextjs的自动路由(推荐)
直接移除自定义的index和about视图及对应路由,让django-nextjs自动代理所有Next.js页面:
修改Django路由配置:
from django.contrib import admin from django.urls import include, path urlpatterns = [ path('admin/', admin.site.urls), path("", include("django_nextjs.urls")), ]
此时django-nextjs会自动处理根路径/和/about/的请求,无需手动编写视图。
方法2:保留自定义视图并指定页面参数
若需要在视图中添加额外逻辑,需在调用render_nextjs_page_sync时明确指定对应Next.js页面的路径:
修改Django视图代码:
from django_nextjs.render import render_nextjs_page_sync def index(request): return render_nextjs_page_sync(request, page="/") def about(request): return render_nextjs_page_sync(request, page="/about")
同时调整路由顺序,将自定义视图路由放在include("django_nextjs.urls")之前,避免自动路由拦截请求:
from django.contrib import admin from django.urls import include, path from . import views urlpatterns = [ path('admin/', admin.site.urls), path("", views.index, name="index"), path("about/", views.about, name="about"), path("", include("django_nextjs.urls")), ]
额外检查
- 确认Next.js的
about页面路径正确:Pages Router下需为pages/about.js;App Router下需为app/about/page.js - 确保django-nextjs的核心配置(如
NEXTJS_SERVER_URL)已正确设置,保证Django能正常访问Next.js服务
内容的提问来源于stack exchange,提问作者Kevin Nyarang'o
相关产品推荐
相关产品推荐

