【问题标题】:how can i ajax url dynamically with django template?我如何使用 django 模板动态地 ajax url?
【发布时间】:2017-08-08 22:01:01
【问题描述】:

喜欢同样的问题但没有解决--> Send Dynamic AJAX URL in Django

我想通过动态 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)
 }});

做得好的数据发送到网址,但我不能从这个网址提取数据

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/

但不是动态 url :(

提前感谢您的帮助。

【问题讨论】:

  • 如果您通过 HTML 检查元素,您会看到什么代替“ var endpoint ='/analiz/{{ data.id }}/rapor/hamveri/'; ”?您是否看到标签“{{ data.id }}”或您通过视图发送的值?

标签: python ajax django


【解决方案1】:

你可以尝试的是:

在 JavaScript 启动之前编写此 HTML。 然后改变变量:

var endpoint ='/analiz/{{ data.id }}/rapor/hamveri/';如下所述,

有点像这样:

<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 或 模型数据对象。

不发送 idx 或 模型数据对象 到 repor.html 不会在变量 endpoint 内为您提供如下网址:/analiz/33/rapor/hamveri/ .

在您的视图中,您必须发送一个模型对象

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>

【讨论】:

  • @didierdrogba 我进行了编辑。检查浏览器控制台中是否打印了任何内容。
  • 兄弟感谢您的帮助,但我不能。如果你下载文件,也许你可以dosya.tc/server9/dwbias/istatistik.rar.html 但你没有再次感谢。
  • @didierdrogba 我读了你的代码并看到了问题。我做了一个编辑。请参考它,看看它是否有效。
  • 但我首先通过 ChartData(APIView) 类发送到“analiz/idx/rapor/hamveri”:然后使用此 url 中的 ajax 数据提取。 Reportview 不需要 object.get() 函数,所以这个类只是直接到 html 页面(raport.html)和在 raport.html 中,我可以使用 ajax jquery 提取数据。不是吗?
  • 我认为,只是可编辑的代码 ajax 方法,但我不知道如何编辑。
【解决方案2】:

是的,干得好

我在关键点犯了错误。

@shivamsharma 说您没有将任何 idx 或模型数据对象发送到您的 repor.html。

所以这个函数:

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

【讨论】:

    猜你喜欢
    • 2015-05-21
    • 1970-01-01
    • 2020-04-11
    • 2020-01-02
    • 2018-08-28
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多