喜欢同样的问题,但没有解决 - > Send Dynamic AJAX URL in Django
我想通过动态网址提取数据。
urls.py
url(r'^(?P<idx>\d+)/rapor/$',ReportView.as_view(),name='rapor'),
url(r'^(?P<idx>\d+)/rapor/hamveri/$',ChartData.as_view(),name='hamveri'),
report.html
var endpoint ='/analiz/{{ data.id }}/rapor/hamveri/';
var defaultData = [];
var labels = [];
$.ajax({
method: "GET",
url: endpoint,
success: function(data){
labels = data.labels;
defaultData = data.default;
setChart()
},
error: function(error_data){
console.log("error");
console.log(error_data)
}});
完成的数据发送到网址但我无法从此网址中提取数据
http://127.0.0.1:8000/analiz/33/rapor/
我该如何解决这个问题?
如果我编辑report.html
report.html
var endpoint ='/analiz/33/rapor/hamveri/';
完美运行的网站,它可以从'analiz / 33 / rapor / hamveri /'
中提取数据等; http://127.0.0.1:8000/analiz/33/rapor/
但不是动态网址:(
提前感谢您的帮助。
答案 0 :(得分:0)
你可以尝试的是:
在JavaScript开始之前编写此HTML。 然后更改变量:
var endpoint =&#39; / analiz / {{data.id}} / rapor / hamveri /&#39 ;; ,如下所述,
有点像这样:
<div id="endpoint-url-div" url="{% url 'hamveri' data.id %}" style="display: none;"></div>
<script type="text/javascript">
var endpoint = document.getElementById('endpoint-url-div').getAttribute('url');
//Now endpoint should have a URL like **/analiz/33/rapor/hamveri/**
//Add the rest of your JavaScript as it is.
var defaultData = [];
var labels = [];
$.ajax({
method: "GET",
url: endpoint,
success: function(data){
labels = data.labels;
defaultData = data.default;
setChart()
},
error: function(error_data){
console.log("error");
console.log(error_data)
},
});
</script>
确保从您的视图中正确发送变量。确保视图中的上下文字典中包含变量。
views.py必须包含以下内容:
context = dict()
context['data'] = #Some data model object
修改强>
正如我在你的analiz / views.py中看到的那样,你没有向你的repor.html发送任何 idx 或模型数据对象。
不向repor.html发送 idx 或模型数据对象,不会在变量端点}中为您提供类似:/analiz/33/rapor/hamveri/
的网址STRONG>。
在您的观看中,您必须发送模型对象
class ReportView(View):
def get(self, request, *args, **kwargs):
data = UploadFile.objects.get(...) #Get the model object here. Put something like: user = request.user
context = {'data' : data}
return render(request, 'analiz/rapor.html', context)
现在在您的HTML中:
<div id="endpoint-url-div" url="{% url 'hamveri' data.id %}" style="display: none;"></div>
<script type="text/javascript">
var endpoint = document.getElementById('endpoint-url-div').getAttribute('url');
...
...
... #Rest of the Javascript# ...
...
</script>
答案 1 :(得分:0)
我做了你说的但是这个问题仍然没有解决。我可以发送到数据网址'(?P<idx>\d+)/rapor/hamveri/'
,但我无法从此网址获取数据。
http://127.0.0.1:8000/analiz/33/rapor/hamveri/
http://127.0.0.1:8000/analiz/35/rapor/hamveri/
你看到动态网址发送数据但我无法从中提取数据。
view.py
class ChartData(APIView):
def get(self, request, idx):
dosyacek = get_object_or_404(UploadFile, id=idx)
dosyaname="media/"+dosyacek.file.name
k = 1
n = 2010 # 11
dosya = open_workbook(dosyaname)
sayfa = dosya.sheet_by_index(0)
...
...
...
labels = data_name
default_items = data_frequence
data = {
"idx":idx,
"labels": labels,
"default": default_items,
}
return Response(data)
class ReportView(View):
def get(self, request, *args, **kwargs):
return render(request, 'analiz/rapor.html', {})
https:// hizliresim.com/jWbW5J
答案 2 :(得分:0)
是的,做得好
我在关键时刻犯了错误。
@shivamsharma表示您没有向您的repor.html发送任何idx或模型数据对象。
所以这个功能:
class ReportView(View):
def get(self, request,idx,*args, **kwargs):
return render(request, 'analiz/rapor.html', {'dataninidx':idx}) # added new key
然后我在report.html中更改变量
var endpoint='/analiz/{{ dataninidx }}/rapor/hamveri/';
是的,该程序仅适用于两项更改。
感谢您的帮助,@ shivam-sharma