reactjs - 如何在没有额外请求的情况下提供数据以与 drf 做出反应?
问题描述
我用 react 和 django rest 框架构建了一个单页应用程序。我希望能够通过 django 管理界面更改“静态”信息,以避免每次都进行不必要的额外部署。诸如背景图像和关于部分的文本之类的信息。
要编辑它,我创建cms
django 应用程序并在管理员中注册模型。
为了在生产中服务前端,我使用TemplateView
包django.views.generic
中的。它从捆绑的 react app 目录提供 html 文件。这是根 urls.py 的一部分:
urlpatterns = [
path('admin/', admin.site.urls),
# ...
# api endpoints here
# ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
urlpatterns += [re_path(r'^.*', TemplateView.as_view(template_name='index.html'))]
在我使用的开发中提供react-scripts start
服务create-react-app
如何在那里传递背景图像的当前 url、关于部分的文本等信息?
简单的选择是创建一堆视图以获取此信息并从反应应用程序请求所有数据,但我不太喜欢这种方法。
另一种选择是像这样重新定义 TemplateView
from django.views import generic
class TemplateView(generic.TemplateView):
template_name = 'index.html'
def get_context_data(self, **kwargs):
context_data = dict()
# get all data from db here
return context_data
但是我如何在反应应用程序中使用它呢?在生产和开发中。
我相信应该有正确的方法来解决这样的问题。
解决方案
我发现的一种可能的解决方案是将 url 硬编码为前端的背景图像,并创建或更新与此 url 对应的符号链接。因此,当我在 django admin 上上传新图像时,它会在后台将记录保存在数据库中,保存文件本身并更新符号链接。通过这种方式,我还可以将另一个图像设置为活动,只是在保存过程中更新符号链接。该解决方案对我来说看起来不错,但仅适用于静态文件,不适用于文本数据。
推荐阅读
- python - Python将字符串不一致地写入文件
- node.js - 如何使用 multer 将文件数组保存到 mongoDB 数据库?
- python - 仅在满足特定条件后如何从函数返回
- django - 如何限制 Django 模型使用某些外键值?
- c# - 插页式广告 - 时间过后且仅在游戏结束时出现?
- css - 带有 flex-grow 1 的可滚动 flex 子节点
- reactjs - 使用 React 路由器查询参数
- javascript - javaScript中的未知查询语句
- swift - 为什么字典的for-in循环不是顺序的
- google-app-engine - 当我在应用程序中记录错误时,AppEngine 可以自动向我发送电子邮件吗?