带有mapinput小部件的位置字段,用于选择某个位置
django-mapbox-location-field的Python项目详细描述
Django Mapbox位置字段
使用简单的location模型和表单字段和mapinput小部件来选择某个位置。使用mapbox gl js,灵活的地图提供程序API。与bootstrap框架完全兼容。
目录
- Why this?
- Live demo
- Compatibility
- Instalation
- Configuration
- Usage
- Customization
- Admin interface usage
- AddressAutoHiddenField
- Technologies
为什么这样?
我正在搜索一些django位置字段,它使用mapbox,我可以在我的项目中使用。我没有找到任何适合我100%需要的东西,这就是为什么我创建了这个简单的django应用程序。我的哲学很简单,但我想创建一个完整的解决方案来选择位置。
请随意打开问题,提出请求并请求一些功能或说明。如果你认为这是不灵活的,请告诉我。
兼容性
在Travis CI上自动测试版本:
- Django 1.11、2.0、2.1、2.2
- 巨蟒3.5、3.6、3.7
Django1.11不再支持Python3.7。
浏览器支持
django mapbox location字段支持所有浏览器,由mapbox gl js支持。阅读更多here
现场演示
好奇它的工作原理和外观?观看https://django-mapbox-location-field.herokuapp.com上的现场演示 demo应用程序使用django-bootstrap4来获得外观更好的表单字段。
安装
使用PIP:
pip install django-mapbox-location-field
配置
- 将
"mapbox_location_field"
添加到设置文件中的INSTALLED_APPS
INSTALLED_APPS+=("mapbox_location_field",)
- 在设置文件中定义MAPBOX_KEY。这是易受攻击的信息,必须传递给前端,因此用户可以很容易地访问它。为了确保您的安全,我建议您使用url restrictions和public scopes。有关链接网站的详细信息。
MAPBOX_KEY="pk.eyJ1IjoibWlnaHR5c2hhcmt5IiwiYSI6ImNqd2duaW4wMzBhcWI0M3F1MTRvbHB0dWcifQ.1sDAD43q0ktK1Sr374xGfw"
ps。以上只是访问令牌的示例。您必须粘贴到这里。
用法
- 用locationfield创建一个模型。
fromdjango.dbimportmodelsfrommapbox_location_field.modelsimportLocationFieldclassSomeLocationModel(models.Model):location=LocationField()
- 创建模型窗体
fromdjangoimportformsfrom.modelsimportLocationclassLocationForm(forms.ModelForm):classMeta:model=Locationfields="__all__"
当然,您也可以使用createview、updateview或使用mapbox\u location\u field.forms.locationfield自己构建表单
- 然后在html视图中使用它。再简单不过了! 将此粘贴到HTML头中:
{%loadmapbox_location_field_tags%}{%location_field_includes%}{%include_jquery%}
- 你身体里的这个:
<form method="post">{%csrf_token%}{{form}} <input type="submit" value="submit"> </form>{{form.media}}
- 你的表格准备好了!打开你的网站,看看它看起来怎么样。如果要更改某些内容,请查看customization部分。
定制
为了改变一些事情,你必须使用map_attrs
字典。
默认值map_attrs
如下:
default_map_attrs={"style":"mapbox://styles/mapbox/outdoors-v11","zoom":13,"center":[17.031645,51.106715],"cursor_style":'pointer',"marker_color":"red","rotate":False,"geocoder":True,"fullscreen_button":True,"navigation_buttons":True,"track_location_button":True,"readonly":True,"placeholder":"Pick a location on map below",}
若要更改某些值,请在创建模型时传递它。
fromdjango.dbimportmodelsfrommapbox_location_field.modelsimportLocationFieldclassLocation(models.Model):location=LocationField(map_attrs={"center":[0,0],"marker_color":"blue"})
地图属性
- 样式-
<string>
,映射框样式url。阅读更多here。 - 缩放-
<int>
,地图的缩放。阅读更多here。 - 位于
<float>
s的<list>
或<tuple>
中心,默认地图的中心点位于latitude
,longitude
- 光标样式-
<string>
,css光标样式。阅读更多here。 - 标记颜色-
<string>
css颜色属性。阅读更多here和here。 - 旋转-
<bool>
,无论您是否可以用鼠标右键旋转地图。 - 地理编码器-
<bool>
,无论是否显示地理编码器搜索器。 - 全屏按钮-
<bool>
,无论是否显示全屏按钮。 - 导航按钮-
<bool>
,无论是否显示导航按钮。 - 跟踪位置按钮-
<bool>
,无论是否显示“显示我的位置”按钮。 - 只读-
<bool>
,用户是否可以在文本输入中键入位置 - 占位符-
<string>
,文本输入的占位符
引导
mapinput小部件与引导库完全兼容。我甚至可以推荐与django-bootstrap4或django-crispy-forms一起使用。
管理界面使用
首先创建一些带有位置字段的模型,如usage section。 然后在管理界面中注册,如下所示:
fromdjango.contribimportadminfrom.modelsimportLocationfrommapbox_location_field.adminimportMapAdminadmin.site.register(Location,MapAdmin)
在上面的示例中,location是模型的名称。 来自customization section的所有内容也可以在管理界面中工作。
地址自动隐藏字段
addressAutoHiddenField是用于存储地址的字段。它使用addressautohiddeninput,它是隐藏的,当您将您的标记放在地图上时,会自动用正确的地址填充自己。 为了使用它,只需将它添加到您的模型中。像这样:
classLocation(models.Model):location=LocationField()address=AddressAutoHiddenField()
技术
- Django
- 地图框gl js
- jquery
- HTML和CSS