【发布时间】:2017-08-09 10:21:17
【问题描述】:
我在 Vue.js 中创建了一个单页应用程序,它利用 HTML5 历史模式进行路由,并且 html 文件由 Django 提供。
django的urls.py是这样的:
urlpatterns = [
url(r'^$', views.home),
url(r'^admin/', admin.site.urls),
url(r'^api-token-auth/', obtain_jwt_token),
]
还有views.home:
def home(request):
return render(request, 'index.html')
考虑以下场景:
- 用户访问主页(即
/)
由于主页响应了单页 Vuejs 应用所需的 index.html,因此它的工作方式与预期一样。
- 用户从那里导航到关于页面(即
/username/12)。
它仍然可以正常工作,因为它使用 Vue 路由器导航。
- 现在,用户刷新页面。
由于 urls.py 模式中没有/username/12,它会显示Page not found (404)。
现在,我可以在 urls.py 中提供另一个模式来捕获最后一个顺序中的所有模式,如下所示:
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api-token-auth/', obtain_jwt_token),
url(r'^.*$', views.home),
]
但媒体或静态 url 等其他 url 也将指向相同的 catch all pattern regex。我该如何解决这个问题?
【问题讨论】:
-
包罗万象的 URL 是要走的路。这不会影响媒体或静态,因为 Django 在生产中不提供它们。
标签: django vue.js single-page-application vuejs2