【问题标题】:Django - page not found with VueJS [duplicate]Django - 使用 VueJS 找不到页面 [重复]
【发布时间】:2021-03-22 13:23:50
【问题描述】:

我正在尝试在我的 Django 项目中使用 Vue 创建一个 SPA,以便 Django 仅处理身份验证模板,而前端的其余部分完全由 webpack-loader 呈现 Vue,因此它是 Django 呈现 Vue 应用程序。我这样做是为了不失去完全由 Django 处理身份验证的好处。

因此,/accounts/ 以下的所有内容都将由 django 视图呈现的 Django 模板处理,而/app/ 以下的所有内容都将由 Vue 应用程序处理。

我有以下几点:

urlpatterns = [
    # Some standard django templates url here for authentication..
    # ...
    # The Vue app:
    path('app/', views.vueApp, name='vueApp'),
]

所以当用户导航到mysite.com/app 时,Vue 会将整个前端作为 SPA 及其路由处理:

//main.js
const router = new VueRouter({
  base: '/app',
  mode: 'history',
  routes: [
    { path: '/', component: Home },
    { path: '/test1', component: testcomponent },
    { path: '/test2', component: test2component }
  ]
})

我的代码的问题在于,如果我从 Vue 应用程序内部单击指向test1test2 的链接,我将被重定向到testcomponent (@987654330 @) 和test2component (mysite.com/app/test2);相反,如果我打开浏览器并直接导航到mysite.com/app/test1mysite.com/app/test2,我会收到 Django 的“找不到页面”错误,我认为是因为 Django 认为我正在尝试访问标准的 Django url,而我却'我试图访问由我的 Vue 应用处理的 URL。

有没有办法解决这个问题?提前致谢!

【问题讨论】:

标签: django vue.js


【解决方案1】:

要解决这个问题,您需要一个包罗万象的路线,以确保您在您的网址中也捕获/ 之后的所有内容。否则看起来您的网址不匹配。你需要这样的东西(如果你使用正则表达式来匹配):

path('app/?.*$', views.vueApp, name='vueApp'),

这应该匹配以app/ 开头的所有内容,并且后面还有其他内容。你不关心用 django 捕获这些东西,因为 vue 路由器会从那时起处理它。

预计到达时间: 如果您不使用正则表达式,我认为您可以使用这种格式来接受斜杠之后的任何内容:

path('app/<path:rest_of_path>', views.vueApp, name='vueApp'),

【讨论】:

  • 确实这是要走的路。谢谢!
  • 不客气!
猜你喜欢
  • 2017-09-22
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 2016-01-18
  • 2016-08-01
  • 2016-08-01
相关资源
最近更新 更多