Reputation: 3
like same problem but not solve--> Send Dynamic AJAX URL in Django
i want to data extraction by using dynamically url.
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)
}});
well-done data send to web address but i can't data extraction from this url
http://127.0.0.1:8000/analiz/33/rapor/
how can i fixed this problem?
if i edit report.html
report.html
var endpoint ='/analiz/33/rapor/hamveri/';
perfect-run web site, it can data extraction from 'analiz/33/rapor/hamveri/'
and so; http://127.0.0.1:8000/analiz/33/rapor/
but not dynamically url :(
Thanks in advance for your help.
Upvotes: 0
Views: 2665
Reputation: 3
Yes, well-done
i make mistake in a critical point.
@shivamsharma said that you are not sending any idx or model data object to your repor.html.
So this function:
class ReportView(View):
def get(self, request,idx,*args, **kwargs):
return render(request, 'analiz/rapor.html', {'dataninidx':idx}) # added new key
Then i change variable in report.html
var endpoint='/analiz/{{ dataninidx }}/rapor/hamveri/';
Yes, the program only works with two changes.
Thanks for your help, @shivam-sharma
Upvotes: 0
Reputation: 919
What you can try is:
Write this HTML just before the JavaScript starts. Then change the variable:
var endpoint ='/analiz/{{ data.id }}/rapor/hamveri/'; as described below,
Somewhat like this:
<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>
Make sure that variable is sent correctly from your views. Make sure you have a variable inside your context dictionary inside the views.
views.py must have something like:
context = dict()
context['data'] = #Some data model object
EDIT:
As I can see in your analiz/views.py, you are not sending any idx or model data object to your repor.html.
Not sending idx or model data object to repor.html will not give you a url like: /analiz/33/rapor/hamveri/
inside the variable endpoint.
In your views, you have to send a model object
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)
Now in your 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>
Upvotes: 2