我怎么能用django模板动态地ajax url?

时间:2017-08-08 22:01:01

标签: python ajax django

喜欢同样的问题,但没有解决 - > 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/

但不是动态网址:(

提前感谢您的帮助。

3 个答案:

答案 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