用于zope3的google map geo location和z3c.form小部件

m01.gmap的Python项目详细描述


这个包为zope3提供了一个基于m01.mongo和z3c.form的google地图小部件。

自述文件

这个包为google maps提供了一个z3c.form小部件概念。了解更多信息 关于google地图,请参见:http://code.google.com/apis/maps/

>>> import os
>>> import zope.component
>>> from zope.pagetemplate.interfaces import IPageTemplate
>>> from zope.interface.verify import verifyClass
>>> from z3c.form.interfaces import IWidget
>>> from z3c.form.interfaces import INPUT_MODE
>>> from z3c.form.testing import TestRequest
>>> from z3c.form.widget import WidgetTemplateFactory
>>> import m01.gmap
>>> import m01.gmap.util
>>> import m01.gmap.browser
>>> from m01.gmap import interfaces
>>> from m01.gmap.widget import GMapWidget
>>> from m01.gmap.widget import GeoPointGMapWidget

gmapwidget

google map(GMapWidget)小部件允许您显示select latitude的地图 输入模式下地理位置的经度。在显示模式下,它提供 显示给定位置的gmap。

对于所有小部件,gmap小部件必须提供IWidget 接口:

>>> verifyClass(IWidget, GMapWidget)
True

只能使用请求来实例化小部件:

>>> request = TestRequest()
>>> widget = GMapWidget(request)

在呈现小部件之前,必须设置小部件的名称和id:

>>> widget.id = 'widget.id'
>>> widget.name = 'widget.name'

我们还需要注册小部件的模板:

>>> def getPath(filename):
...     return os.path.join(os.path.dirname(m01.gmap.__file__),
...     filename)
>>> zope.component.provideAdapter(
...     WidgetTemplateFactory(getPath('widget_input.pt'), 'text/html'),
...     (None, None, None, None, interfaces.IGMapWidget),
...     IPageTemplate, name=INPUT_MODE)

如果我们呈现小部件,我们会得到一个简单的输入元素:

>>> print(widget.render())
<input type="hidden" id="widget.id-latitude" name="widget.name-latitude" class="hidden-widget" value="" />
<input type="hidden" id="widget.id-longitude" name="widget.name-longitude" class="hidden-widget" value="" />
<div id="widget.id" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
  $("#widget\\.id").m01GMapWidget({
    iconWidth: 19,
    infoWindowAnchorYOffset: 0,
    iconHeight: 32,
    responsive: true,
    iconURL: "http://127.0.0.1/@@/m01GMapWidgetIcon.png",
    iconAnchorXOffset: 9,
    zoomFallback: 4,
    zoom: 11,
    longitude: null,
    longitudeFallback: 10,
    latitudeFallback: 10,
    latitudeExpression: "#widget\\.id-latitude",
    mode: "input",
    infoWindowContent: "Drag and drop the marker and save the form. <br />Double click the marker for remove them.",
    address: "",
    latitude: null,
    iconAnchorYOffset: 30,
    longitudeExpression: "#widget\\.id-longitude",
    iconShadowURL: "http://127.0.0.1/@@/m01GMapWidgetIconShadow.png",
    infoWindowAnchorXOffset: 10
  });
</script>
<BLANKLINE>

我们还需要包含IGMapAPIProvider,它知道如何生成 gamp api javascipt。它自己的api密钥可以通过产品配置来定义 或者是环境设置。有关详细信息,请参阅buildout.cfg和util.py:

>>> m01.gmap.util.GMAP_API_KEY
u'ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw'

我们提供http或https javascript链接:

>>> print(m01.gmap.util.GMAP_JAVASCRIPT)
<script type="text/javascript" src="//maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>
>>> print(m01.gmap.util.GMAP_HTTPS_JAVASCRIPT)
<script type="text/javascript" src="https://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>

您的内容提供商可以用来呈现完整的javascript:

>>> provider = m01.gmap.browser.GMapAPIProvider(None, None, None)
>>> print(provider.render())
<script type="text/javascript" src="https://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>

geopointgmapwidget

GeoPointGMapWidget小部件提供与GMapWidget相同的功能,但使用 另一个转换器并支持m01.mongo geopoint实现。

对于所有小部件,gmap小部件必须提供IWidget 接口:

>>> verifyClass(IWidget, GeoPointGMapWidget)
True

只能使用请求来实例化小部件:

>>> request = TestRequest()
>>> widget = GeoPointGMapWidget(request)

在呈现小部件之前,必须设置小部件的名称和id:

>>> widget.id = 'widget.id'
>>> widget.name = 'widget.name'

我们还需要注册小部件的模板:

>>> def getPath(filename):
...     return os.path.join(os.path.dirname(m01.gmap.__file__),
...     filename)
>>> zope.component.provideAdapter(
...     WidgetTemplateFactory(getPath('widget_input.pt'), 'text/html'),
...     (None, None, None, None, interfaces.IGeoPointGMapWidget),
...     IPageTemplate, name=INPUT_MODE)

如果我们呈现小部件,我们会得到一个简单的输入元素:

>>> print(widget.render())
<input type="hidden" id="widget.id-latitude" name="widget.name-latitude" class="hidden-widget" value="" />
<input type="hidden" id="widget.id-longitude" name="widget.name-longitude" class="hidden-widget" value="" />
<div id="widget.id" style="width: 400px; height: 300px"></div>
<script type="text/javascript">
  $("#widget\\.id").m01GMapWidget({
    iconWidth: 19,
    infoWindowAnchorYOffset: 0,
    iconHeight: 32,
    responsive: true,
    iconURL: "http://127.0.0.1/@@/m01GMapWidgetIcon.png",
    iconAnchorXOffset: 9,
    zoomFallback: 4,
    zoom: 11,
    longitude: null,
    longitudeFallback: 10,
    latitudeFallback: 10,
    latitudeExpression: "#widget\\.id-latitude",
    mode: "input",
    infoWindowContent: "Drag and drop the marker and save the form. <br />Double click the marker for remove them.",
    address: "",
    latitude: null,
    iconAnchorYOffset: 30,
    longitudeExpression: "#widget\\.id-longitude",
    iconShadowURL: "http://127.0.0.1/@@/m01GMapWidgetIconShadow.png",
    infoWindowAnchorXOffset: 10
  });
</script>
<BLANKLINE>

我们还需要包含igmapapiprovider,它知道如何生成 gamp api javascipt。它自己的api密钥可以通过产品配置来定义 或者是环境设置。有关更多信息,请参见buildout.cfg和util.py:

>>> m01.gmap.util.GMAP_API_KEY
u'ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw'

我们提供http或https javascript链接:

>>> print(m01.gmap.util.GMAP_JAVASCRIPT)
<script type="text/javascript" src="//maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>
>>> print(m01.gmap.util.GMAP_HTTPS_JAVASCRIPT)
<script type="text/javascript" src="https://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>

您的内容提供商可以用来呈现完整的javascript:

>>> provider = m01.gmap.browser.GMapAPIProvider(None, None, None)
>>> print(provider.render())
<script type="text/javascript" src="https://maps.google.com/maps?file=api&amp;v=2&amp;key=ABQIAAAAFAsu6H_TCNEapjedv-QILxTwM0brOpm-All5BF6PoaKBxRWWERQwU76rKRQO6OVZmsjxrqya2hcEBw"> </script>

更改

0.8.1(2018-07-23)

  • 已从javascript中删除console.log调用

0.8.0(2018-04-24)

  • 功能:支持响应选项和大小调整渲染gmap。新的 选项useresizer、useresizerrigter和responsive在中提供 javascript。

0.7.0(2013-11-23)

  • 特点:支持M01.mongo版本提供的新的geopoint实现 0.11.0采用新的geopointgmapwidget和z3c.form转换器实现
  • 删除了google maps api v2 javascript

0.6.1(2013-06-28)

  • 错误修复:在gmaps v3 api javascript中修复lat、lng设置

0.6.0(2013-01-04)

  • 更新至google maps api v3

0.5.0(2012-11-18)

  • 初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Hibernate、Spring和SLF4J绑定   java如何准确地导航导航地图。天花板入口()工作?   从excel文件导入数据时发生java异常   java如何将地图转换为url查询字符串?   java HSQLDB在数据库中插入值   java将元素从JTextField添加到ArrayList   java如何使用SetDataSource从名称中有空格的MP3文件中获取唱片集艺术   java排序ArrayList<ArrayList<String>>作为行字段   java在拼写检查器中更新正确的拼写   哪里可以找到JavaAPI类图?   spring boot如何在自动生成的swagger java类中屏蔽任何参数   java使用哪种设计模式(我需要类似中介模式的东西)?   java为什么JTextfield没有出现在这个实例中?   如何在Java中向当前日期添加一个月?   安卓如何使java类可序列化,从而扩展不可序列化的