反应路由和django url冲突 [英] react routing and django url conflict
问题描述
我使用reactjs作为前端,django作为后端。 React路由器用于路由。当我刷新由反应路由器路由的页面时,我得到django 404 Page Not Found error
。如果我刷新主页,我不会得到任何这样的错误,因为主页也是由django模板使用其url呈现。
I am using reactjs as a frontend and django as backend. React router is used for routing. When i refresh the page that has routed by react router, i get django 404 Page Not Found error
. If i refresh the homepage, i dont get any such error because the homepage is rendered by django template too using its url.
我是否必须在webpack中配置它?我的项目结构是我已经分离了django和reactjs。我创建了一个文件夹作为前端,其中reactjs文件驻留。
Do i have to configure that in the webpack? My project structure is i have seperated django and reactjs. I have created a folder as frontend where reactjs file resides.
更新
主页模板包含addrestaurant等路线的所有链接。
homepage template has all the link for routes like addrestaurant.
我的webpack.config文件
const path = require("path");
if(!process.env.NODE_ENV) {
process.env.NODE_ENV = 'development';
}
module.exports = {
entry: [
'./src/index.js'
],
output: {
path: path.join("../app/static/build/", "js"),
filename: "app.js",
publicPath: "../app/static/build/"
},
devtoo: 'source-map',
debug: true,
module: {
loaders: [{
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['react', 'es2015', 'stage-1']
}
},
{test: /\.(jpe?g|png|gif|svg)$/i, loader: "url-loader?name=images/[name].[ext]"},
]
},
resolve: {
extensions: ['', '.js', '.jsx']
},
devServer: {
historyApiFallback: true,
contentBase: './'
}
};
urls.py
urlpatterns = [
url(r'^', views.home, name="homePage"),
url(r'^(?:.*)/?$', views.home),
]
home.html
{% extends 'base.html' %}
{% block title %} Foodie | Homepage {% endblock title%}
{% block content %}
<div class="homepage">
</div>
{% endblock %}
{% block js %}
{{ block.super }}
<script type="text/javascript">
var data = {
isUserAuthenticated:{% if request.user.is_authenticated %}true{% else %}false{% endif %}
};
console.log('data',data);
$(function() {
app.showHomePage(".homepage",data);
});
</script>
{% endblock %}
index.js
window.app = {
showHomePage: function(id,data){
render(
<Provider store={createStoreWithMiddleware(reducers)}>
<Router>
<App />
</Router>
</Provider>, document.querySelector(id)
);
},
}
Banner是App的子组件组件
const Banner = (props) => (
<div className="navbar-container">
<div className="ui container">
<div className="ui large secondary menu">
<a className="toc item">
<i className="sidebar icon"></i>
</a>
<div className="item logo">
<div className="ui logo shape">
<div className="sides">
<div className="active ui side">
Foodie
</div>
</div>
</div>
</div>
<Link to="/restaurant" className="active item tab">Home</Link>
<Link to='/addrestaurant' className='item tab'>Add Restaurant</Link>
<Link to="/products" className="item tab">Products</Link>
<div className="right item">
<a href="" id="bookingInfoButton" className="ui white inverted button">Booking</a>
</div>
</div>
</div>
</div>
);
export default Banner;
推荐答案
问题可能是你没有配置你的用于处理React Router中定义的路由的URL。在您的Django urls.py
中,您应该使用catch all来匹配索引模板的所有URL
The issue is probably that you haven't configured your URLs to handle the routes that are defined in React Router. In your Django urls.py
you should be using a catch all to match all URLs to your index template
urlpatterns += [
# match the root
url(r'^$', base_view),
# match all other pages
url(r'^(?:.*)/?$', base_view),
]
base_view
将是一个视图函数,用于呈现包含捆绑应用的模板。
The base_view
would be a view function that renders a template which includes your bundled app.
这篇关于反应路由和django url冲突的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!