django - 如何使用 Django webpack loader 在 Django 中使用 VueJs 组件?
问题描述
我按照本教程使用 django-webpack-loader 集成了 Django 和 VueJs,现在 django-webpack-loader 的 main.js 输出正在加载到我的 index.html
这是我的项目目录结构
- assets
- bundles
- app.js
- js
- components
- Demo.vue
- index.js
- db.sqlite3
- manage.py
- myapp
- myproject
- node_modules
- package.json
- package-lock.json
- requirements.txt
- templates
- webpack.config.js
- webpack-stats.json
我的Demo.vue
组件已被导入index.js
并使用webpack.config.js
文件,所有必要的文件都已捆绑到app.js
.
我的问题是下一步是什么?例如,如果我有一些 VueJs 组件并且想在我的一些模板中使用它们,我应该怎么做?我应该在组件目录中创建组件并将它们全部捆绑吗?如果是这种情况,我应该如何选择使用或不使用特定模板中的组件?我应该如何使用 Django 模板标签来插入动态数据?或者我应该以另一种方式编写我的组件?
我知道这里有多个问题,但我找不到一个很好的参考来回答我的问题,所以任何帮助都将不胜感激。
解决方案
Django 使用一种称为Jinja的模板语言将上下文(信息)从视图传递到模板。假设这myapp
是一个 Django 应用程序,默认情况下您应该有一个myapp/views.py
文件。
在myapp/views.py
中,您可以创建视图(访问特定 URL 时运行的代码)。例如,您的视图可能类似于:
from django.shortcuts import render
def my_view(request):
context = {
'my_variable': 'my_variable_value',
}
return render(request, 'template.html', context)
然后,在template.html
* 中,您可以使用 Jinja 解析您的上下文(访问my_variable
的值)。您的模板不必是 HTML 文件,它可以是任何东西(JS、PHP 等),它只是从您的视图加载的模板文件。
<html lang="en">
<head></head>
<body>
<h1>{{ my_variable }}</h1>
</body>
</html>
您也可以将 Jinja 与 Javascript 一起使用:
<script>
function test() {
console.log({{ my_variable }});
}
</script>
Jinja 支持多种功能,包括循环、if 块和自定义函数(标签)。阅读更多:https ://codeburst.io/jinja-2-explained-in-5-minutes-88548486834e
如果您使用不在模板文件中的静态文件,则必须将它们作为静态文件提供。这有点复杂,但并不难!您必须使用第三方库在生产中提供这些文件,例如whitenoise。Here's a great tutorial for Django static files,因为这超出了这个问题的范围。
*最佳做法是创建一个目录myapp/templates
并放入template.html
该目录。然后,将 Django 指向您的templates
文件夹settings.py
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["myapp/templates"],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
推荐阅读
- javascript - 时刻:只要当前时间和日期在请求时间之前最多 30 分钟,用户就应该能够执行 X
- javascript - mapbox 讲故事点击 div
- java - Spring应用程序Thymeleaf中的css问题
- c - 使用 %d 从 sscanf 获取错误输出
- angular - 在 Angular 8 / Spring Boot 应用程序中使用文本编辑器
- c# - 在 ADO.NET(包装类)中编写更少的代码
- php - 我如何在 php 中使用 array_filter
- github - 设置多个子目录链接多个github页面
- ruby - 如何在 Ruby 中测试网络爬虫
- swift - AudioKit 4.9.5 AKRotaryKnobStyle 标识符名称违规