我一直在自学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>
所以有几个问题:
'''这是使用标记将变量获取到javascript中的好方法吗?
{% 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或其他形式传递给该路径?
抱歉回答多个问题,但处于学习模式...
为了回答我自己的问题,我在堆栈溢出中发现了以下内容,有助于理解。
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,所以我将其交给其他人来解释。