作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
背景大家好,尝试使用 Django 和 VUE 构建一个“回顾性应用程序”。我已经创建了登录名和显示登录用户创建的“板”列表的仪表板。板是一个主题表,任何人只要知道链接就可以添加并且不需要登录。
问题当我点击板时,它显示了数据库中的所有主题,我如何将板的“PK”从 Vue CDN 传递到 Django DRF 以获得过滤结果。
环境:Django、VUE.js、Django Rest 框架工作
请注意:Django 和 VUE 非常新,这是我人生中的第一个项目,过去 8 个月的学习,请放轻松。
下面是 Board.html,带有 Vue CDN。
{% load static %}
{% block content %}
<div id="app">
<div class="container">
<form @submit.prevent="submitForm">
<div class="form-group row">
<input type="text" class="form-control col-3 mx-2" placeholder="Todo" v-model="retroboard.todo">
<input type="text" class="form-control col-3 mx-2" placeholder="inprogress"
v-model="retroboard.inprogress">
<input type="text" class="form-control col-3 mx-2" placeholder="Action Items" v-model="retroboard.done">
<button class="btn btn-success">Submit</button>
</div>
</form>
<!-- <div>
<form method="POST">
{% csrf_token %}
{{form.todo}}
{{form.inprogress}}
{{form.done}}
<button class="btn btn-primary">Add</button>
</form>
</div> -->
<table class="table">
<thead>
<th>Todo</th>
<th>InProgress</th>
<th>Done</th>
</thead>
<tbody>
<tr v-for="board in retroboards" :key="board.id" @dblclick="$data.retroboard = board">
<td>[[ board.todo ]]
<a href=" "> <i class=" fa fa-heart"></i> </a>
<a href=" "> <i class="fa fa-trash"></i> </a>
</td>
<td>[[ board.inprogress ]]</td>
<td>[[ board.done ]]</td>
<td> <button class="btn btn-outline-danger btn-sm mx-1" @click="deleteTopic(board)">x</button>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- Vue.js -->
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.js"></script>
<script>
var app = new Vue({
el: '#app',
delimiters: ['[[', ']]'],
data() {
return {
retroboard: {
"todo": '',
"inprogress": '',
"done": '',
"id": ''
},
retroboards: [],
}
},
async created() {
await this.getRetroTopics();
},
methods: {
submitForm() {
if (this.retroboard.id === undefined) {
this.createRetroTopic();
} else {
this.editRetroTopic();
}
},
async getRetroTopics() {
var response = await fetch("http://127.0.0.1:8000/api/retroboard/");
this.retroboards = await response.json();
},
async createRetroTopic() {
await this.getRetroTopics()
await fetch("http://127.0.0.1:8000/api/retroboard/", {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken,
},
body: JSON.stringify(this.retroboard)
});
// this.retroboards.push(await response.json());
await this.getRetroTopics();
this.retroboard = {};
},
async editRetroTopic() {
await this.getRetroTopics()
await fetch(`http://127.0.0.1:8000/api/retroboard/${this.retroboard.id}/`
, {
method: 'PUT',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken,
},
body: JSON.stringify(this.retroboard)
});
await this.getRetroTopics();
this.retroboard = {};
},
async deleteTopic(retroboard) {
await this.getRetroTopics()
await fetch(`http://127.0.0.1:8000/api/retroboard/${retroboard.id}/`
, {
method: 'delete',
headers: {
'Content-Type': 'application/json',
'X-CSRFToken': csrftoken,
},
body: JSON.stringify(this.retroboard)
});
await this.getRetroTopics();
}
}
})
</script>
{% endblock %}```
最佳答案
有点晚了但是。
我建议你使用 slot 和 props。大多数时候,这是将 Django 变量提供给 vue 的最佳方式。
例如:
index.js :
let myComponent = {
data : function() {
return {
in_message : "Hello World !",
}
},
props : {
p_url : String,
p_pk : Number,
},
methods : {},
template : " \
<div alt='Slot must be surround'> \
<slot \
:out_message='in_message' \
></slot> \
</div> \
",
}
var app = new Vue({
delimiters : ['[[', ']]'],
el : '#app',
components : {
myComponent
},
})
index.html
<html>
<head>
<title>Django | VueJS {% trans " are working together "%}</title>
</head>
<body>
{% with message="Django" url="/" pk=1 %}
<my-component
p_url='{{ url }}'
p_pk='{{ pk}}'
>
<template v-slot:default='my_slot_name'>
<p>{{message}} | [[ my_slot_name.out_message ]] </p>
</template>
</my-component>
{% endwith %}
</body>
</html>
vuejs 和 django 还有很多其他技巧可以让它们一起工作,如果需要的话可以给我发消息。
关于Django,Vue - 如何将 prop 从 Django 传递到 Vue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66523559/
我是一名优秀的程序员,十分优秀!