我的HTML代码是(ser.html)
<div>
<a v-bind:href="'ser/'+post.name">
{{post.name}}</a>
</div>
我需要将post.name从此文件传递给其他ie。(det.html)
我的views.py是
from django.shortcuts import render
import os
def ser(request):
return render(request,"ser.html",{});
def det(request):
return render(request,"det.html",{'name' :name});
我的urls.py是
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^abt', views.abt),
url(r'^$', views.index),
url(r'^ser',views.ser),
url(r'^det',views.det),
]
我的det.html有以下代码
<script>
mounted() {
var self = this;
$.ajax({
url: 'post/filter/',
data: {
category: {{name}},
},
type: "POST",
dataType: 'json',
success: function (e) {
if (e.status == 1) {
window.searchContent.vector = e.data;
console.log(e);
}
}
});
</script>
我需要将'name'传递给此det.html类别才能触发ajax请求。但是当我这样做时,我会收到错误。这是我使用python和vue js的项目。有人可以帮帮我吗?
错误是:
missing 1 required positional argument: 'name'
答案 0 :(得分:1)
在view.py
文件中,渲染器无法从何处获取name
变量。以下是解决此问题的一种方法:您可以将name
参数从ser.html
传递到后端作为GET参数:
<div>
<a v-bind:href="'searchnew/?name='+post.name">
{{post.name}}</a>
</div>
然后在view.py
文件中,获取名称变量:
def det(request):
name = request.GET.get('name')
return render(request,"det.html",{'name' :name})
在det.html
中,它将可用。
如果您想使用POST请求执行此操作,请更改ser.html以运行VueJS函数,如下所示:
<div>
<a v-on:click="funcToPost">{{post.name}}</a>
</div>
在VueJS对象中实现funcToPost方法来执行POST调用,如下所示:
var app = new Vue({
// ... some code here
methods: {
funcToPost: function() {
// ... some code here
$.ajax({
// ... some code here
data: {
name: {{name}}
}
})
}
}
})
在view.py中将request.GET.get('name')
更改为request.POST.get('name')
。
希望这能解决您的问题。祝你好运。