首页 > 解决方案 > Django 和 javascript 并使用 URL 模板为 jvectormap 传递变量

问题描述

我一直在自学 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}} ),但这似乎不起作用。我认为您可以通过这种方式在参数中传递字符串。我看到发现了一篇不同的帖子,建议用标签'''包装变量
{{ 参数 }}

''' 是使用标签将变量导入 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?

很抱歉有多个问题,但在学习模式中......

标签: javascriptdjangojvectormap

解决方案


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

Django 模板变量和 Javascript

在 Django url 模板标签中获取 javascript 变量的值

和其他几个。

简短的回答是,模板标签一旦渲染就只是 html 文件中的文本。

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

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

3)有人指出使用GET语句更好更简单。不知何故,AJAX 可以用来做到这一点。我只是在学习如何拼写 Ajax,所以我将把它留给其他人来解释。


推荐阅读