当前位置: 首页 > 面试题库 >

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

麻阳
2023-03-14
问题内容

我正在将Django Rest Framework与React.js一起使用。我的页面使用如下所示的api显示了一个用户的个人资料:

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

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

我可以使用诸如window.location.href之类的函数并从末尾弹出数字,但是有没有办法通过直接从服务器传递pk来执行此操作,即使用模板变量吗?


问题答案:

渲染组件时,应将pk作为道具传递。

<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中)导出模块。

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

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

然后在常规脚本标签中使用模块

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

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


 类似资料:
  • 我需要在React类组件中插入一个JS-script,并使该脚本仅在该组件已经挂载并且物理上位于DOM中的时刻运行。我该怎么做呢?谢谢你的关注。

  • 问题内容: 当我使用Django模板渲染器渲染页面时,可以传入包含各种值的字典变量,以使用来在页面中对其进行操作。 有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够基于传入的变量中包含的值使用AJAX查找来查找详细信息。 问题答案: 将直接替换为HTML。查看资料;它不是“变量”或类似的变量。它只是渲染的文本。 话虽如此,你可以将

  • 我需要在React类组件中插入一个JS-script,并使该脚本仅在该组件已经挂载并且物理上位于DOM中的时刻运行。我该怎么做呢?谢谢你的关注。

  • 问题内容: 当我使用Django模板渲染器渲染页面时,可以传入包含各种值的字典变量,以使用来在页面中对其进行操作。 有没有办法在Javascript中访问相同的变量(也许使用DOM,我不知道Django如何使变量可访问)?我希望能够基于传入的变量中包含的值使用AJAX查找来查找详细信息。 问题答案: 将直接替换为HTML。查看资料;它不是“变量”或类似的变量。它只是渲染的文本。 话虽如此,你可以将

  • 问题内容: 我正在使用Google App Engine和Django模板。 我有一个想要显示对象的表格,如下所示: Django模板是: 现在Django文档指出当它看到一个。在变量中 它尝试几种方法来获取数据,其中之一是字典查找,这正是我想要的,但似乎没有发生… 问题答案: 我找到了一种在内部获取变量的“更好”的解决方案,虽然不是最好的方法,但是它可以工作。 你将自定义过滤器安装到Django

  • 问题内容: 我有一个非常基本的模板(basic_template.html),并希望使用使用另一部分模板格式化的数据来填写。basic_template.html可能包含使用部分模板格式化的几件事。 我应该如何在views.py中构建代码? 我这样做的原因是稍后将使用Ajax填充。我这样做对吗? 问题答案: 你可以做: 另一个Django模板在哪里。在这里,你可以放入将用Ajax获得的HTML。