如何将 Django 模板变量插入 React 脚本?

IT技术 django reactjs
2021-03-29 13:14:29

我正在使用带有 React.js 的 Django Rest 框架。我的页面使用这样的 api 显示一个用户的个人资料:

http://localhost:8000/api/profile/[pk]

我想动态设置 react ajax 请求的 url 以包含正确的 pk,以便它从服务器请求正确的用户信息。

我可以使用像 window.location.href 这样的函数并从末尾弹出数字,但是有没有办法通过直接从服务器传递 pk 来做到这一点,即使用模板变量?

1个回答

当您渲染组件时,您应该将 pk 作为props传递。

<script>
React.render(React.createElement(Profile, {
    userId: "{{ userId }}", 
    urlPrefix: "/api/profile/" 
}), element);
</script>

更好的选择可能是只获取用户,然后渲染组件。例如,使用超级代理:

superagent.get('/api/profile/{{ userId }}', function(res){
    React.render(React.createElement(Profile, 
        {user: res.body}
    ), element);
});

使用 browserify,您可以在脚本标签中包含数据,并在您的代码中使用它:

<script>var _appData = {userId: "{{ userId }}"};</script>

或者使用-r标志(.require()在 api 中)导出module

# sh
browserify -r react -r src/profile.js:profile.js

// js
b.require('react').require('src/profile.js', {expose: 'profile.js'});

然后使用常规脚本标签中的module

<script>
var React = require('react');
var Profile = require('profile.js');

React.render(React.createElement(Profile, {
    userId: "{{ userId }}", 
    urlPrefix: "/api/profile/" 
}), element);
</script>
我假设 <script> 标签是你的 html 页面的一部分。但是你如何将代码翻译成 javascript 呢?browserify可以处理html吗?
2021-05-25 13:14:29
我添加了一些与 browserify 一起使用的示例(并将其更新为 0.12/0.13 兼容)。
2021-05-30 13:14:29
嗯 - 现在我使用一个名为“app.js”的文件,它是用 browserify 构建的。我只是从我的 django 模板中调用它,<script src="app.js"></script>所以我认为这个解决方案不起作用。还有其他解决方法吗?
2021-06-07 13:14:29
问题是询问 django,它具有使用该语法的服务器端模板。它可以是车把,也可以是您选择的模板语言。
2021-06-09 13:14:29
我真的对 <script> 标签感到困惑。浏览器抱怨“需要未定义”。能否给出一个完整的例子,如何定义profile.js,如何使用browserify编译它,以及如何将编译后的js文件包含到html文件中?
2021-06-14 13:14:29