Django和javascript,并使用URL模板为jvectormap传递变量

问题描述 投票:0回答:1

我一直在自学python和Django,并希望在网页上显示可点击的地图。我不懂javascript,但是我发现jvectormap似乎很简单,而且效果很好。

但是我对模板标签感到困惑。使用下面的代码,我可以显示世界地图,并且使用onregion函数可以获取国家代码并将其发送给警报,如果我注释掉警报,则可以使用Django URL标记将其发送到另一个网页。

{% load static %}
{% load static %}
{{params}}
    <!DOCTYPE html>
    <html>
    <head>
      <title>jVectorMap demo</title>
      <link href="{% static 'css/jquery-jvectormap-2.0.5.css' %}" rel="stylesheet" type="text/css" media="screen"/>
      <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
      <script src="{% static 'js/jquery-jvectormap-2.0.5.min.js' %}"></script>
      <script src="{% static 'js/jquery-jvectormap-world-mill-en.js' %}"></script>
    </head>
    <body>
      <div id="world-map" style="width: 600px; height: 400px"></div>
      <script>
      $(function(){
          $('#world-map').vectorMap({ map: 'world_mill_en',
                onRegionClick:function(event, code){
                  var message = (code);
                 alert( code );
                window.location.assign ("{% url 'mainapp:home2' %}")
              }
          });
      });
      </script>
    </body>
    </html>

所以有几个问题:

  1. 我以为我应该能够在警报中使用模板标签,就像alert({{params}})一样,但这似乎不起作用。我认为您也许可以通过params传递字符串。我看到发现了另一则文章,建议用标签包装变量'''
{{params}}

'''这是使用标记将变量获取到javascript中的好方法吗?

  1. 更重要的是,使用URL模板标记,我想将国家代码或其他信息传递回视图。在文档中,您似乎可以使用:
{% url 'some-url-name' v1 v2 %}

{% url 'some-url-name' arg1=v1 arg2=v2 %}

我将如何通过该方法修改当前视图和URL?

def home(request):
    params='this is the home page '
    return render(request,'mainapp/home.html',{'params':params})

我是否只是将返回值替换为重定向?

return redirect('some-view-name', params= code )

然后设置一个URL路径,代码以id或slug或其他形式传递给该路径?

  1. 我应该尝试使用onregion或java onclick脚本将某些内容发送回django的方式吗?

抱歉回答多个问题,但处于学习模式...

javascript django jvectormap
1个回答
0
投票

为了回答我自己的问题,我在堆栈溢出中发现了以下内容,有助于理解。

Django Template Variables and Javascript

Get javascript variable's value in Django url template tag

和其他几个。

简短的答案是,一旦呈现的模板标签只是html文件中的文本。

1)您可以从模板标记中为javascript变量分配一些内容,但这在某些情况下可能不是一个好主意,因为它可能会被滥用。

2)由于模板标记只是文件中的文本,因此有多种方法可以放置占位符,然后使用.replace函数更改占位符,然后反转URL。通常的方法似乎是将占位符设置为一个永远不会被访问的数字,然后用pk或对象ID替换占位符。

3)有人指出,使用GET语句更好,更简单。 AJAX可以以某种方式用于执行此操作。我正在学习如何拼写Ajax,所以我将其交给其他人来解释。

© www.soinside.com 2019 - 2024. All rights reserved.