【问题标题】:How do I insert a Django template variable into a React script?如何将 Django 模板变量插入到 React 脚本中?
【发布时间】:2014-12-16 04:30:17
【问题描述】:

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

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

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

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

【问题讨论】:

  • 或者您的 react.js 代码可以在登录过程中请求 id,通过 JSON 获取并在请求期间存储它?我一般觉得如果你在与 JSON 交互并实现 API,它应该只是一个 API,而不是模板化的东西。
  • @jvc26 现在我的反应代码不使用路由器,它只是一个显示特定配置文件详细信息的功能。页面的其余部分是 django 模板。我目前的解决方案是在包含反应代码的元素中添加一个 html5 数据标签并将 url 放在那里。不是很漂亮,但现在工作。

标签: django reactjs


【解决方案1】:

渲染组件时,应该将 pk 作为 prop 传递。

<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 标志(API 中的.require())导出模块。

# 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>

【讨论】:

  • 嗯 - 现在我使用一个名为“app.js”的文件,它是用 browserify 构建的。我只是从我的 django 模板中调用它,比如&lt;script src="app.js"&gt;&lt;/script&gt;,所以我认为这个解决方案不起作用。还有其他解决方法吗?
  • 我添加了一些用于 browserify 的示例(并将其更新为兼容 0.12/0.13)。
  • 我假设
  • 问题是询问 django,它具有使用该语法的服务器端模板。它可以是车把,也可以是您选择的模板语言。
  • 我真的对
猜你喜欢
  • 1970-01-01
  • 2011-09-26
  • 2010-10-07
  • 1970-01-01
  • 2023-03-28
  • 2011-10-04
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
相关资源
最近更新 更多