我正在尝试在项目中分离前端和后端。我的前端是由组成的reactjs,路由将通过来完成react- router,我的后端是采用表格形式Django,我计划使用前端对Django进行API(ajax)调用。
reactjs
react- router
Django
现在,我不确定如何使这两个目的正确地相互交流。
这是我的项目的链接
这是我的项目结构:
/cherngloong /app (frontend) /cherngloong /templates index.jtml urls.py settings.py ... /contact urls.py views.py
我webpack用来构建我的所有JS和CSS并将其放入index.html其中webpack_loader,如下所示:
webpack
index.html
webpack_loader
{% load render_bundle from webpack_loader %} <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Example</title> </head> <body> <div id="app"></div> {% render_bundle 'main' %} </body> </html>
在Django这里是我的cherngloong/urls.py:
cherngloong/urls.py
urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'', TemplateView.as_view(template_name='index.html')), url(r'^api/', include('contact.urls')) ] urlpatterns += staticfiles_urlpatterns()
我不想从django提供我的应用程序,也不想让django在任何url上提供相同的视图。
这是我的react-router路线:
react-router
var routes = ( <Router> <Route path="/" component={ Views.Layout } > <Route path="contact" component={ Views.Contact }/> </Route> <Route path="*" component={ Views.RouteNotFound } /> </Router> ); export default routes;
我目前可以运行服务器,但是在运行前端部分时,我在开发人员工具中看到了这一点。
http://localhost:8000/static/public/js/main.js Failed to load resource: the server responded with a status of 404 (NOT FOUND)
您settings.py定义以下内容:
settings.py
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'app'), )
这将为/app/目录中的文件提供服务。因此网址会/static/public/js/转换为/app/public/js/目录。
/app/
/static/public/js/
/app/public/js/
您想要的是在/public/目录中提供文件。使用以下设置:
/public/
STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'public'), ) WEBPACK_LOADER = { 'DEFAULT': { 'BUNDLE_DIR_NAME': 'js/', 'STATS_FILE': os.path.join(BASE_DIR, 'webpack-stats.json') } }
此外,您在此处和github中发布的代码中的URL也有所不同。该url(r'', Templa...会匹配所有URL和只呈现index.html拨打电话时甚至/api/。将此行移到底部:
url(r'', Templa...
/api/
urlpatterns = [ url(r'^admin/', include(admin.site.urls)), url(r'^api/', include('contact.urls')), ] urlpatterns += staticfiles_urlpatterns() urlpatterns += [ url(r'', TemplateView.as_view(template_name='index.html')), ]