django map widget控制台显示DjangoGooglePointFieldWidget Uncaught ReferenceError

时间:2017-12-19 08:58:12

标签: python django google-maps postgis

我正在尝试实现django地图小部件 https://github.com/erdem/django-map-widgets

但是没有地图出现,我在浏览器控制台中有这个

Uncaught ReferenceError: DjangoGooglePointFieldWidget is not defined

在settings.py中,我有

INSTALLED_APPS = [
...
    'mapwidgets',
]

MAP_WIDGETS = {
    "GoogleStaticMapWidget": (
        ("zoom", 15),
        ("size", "320x320"),
    ),
    "GoogleStaticMapMarkerSettings": (
        ("color", "green"),
    ),
    "GOOGLE_MAP_API_KEY": "AIzaSyA1fXsJSKqZH_Bl9d9wueJMlpXd-6tEJy0"
}

在我的model.py

class CompanySettingEdit(forms.ModelForm):
     display_companyname = forms.CharField(label='Display Company Name', max_length=50, required=True)
    class Meta:
        model = Company
        fields = ("display_companyname","location_point")

        widgets = {
            'location_point': GooglePointFieldWidget,
        }

更新: 我在settings.py中的静态文件配置

STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "../projectapp/static"),
)

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
STATIC_ROOT = os.path.join(PROJECT_DIR, '../../../static_root')

运行python manage.py collectstatic后,静态文件被复制到另一个目录static_root - https://imgur.com/a/TmhYr。请注意,mapwidgets目录不在原始项目静态目录中。即时运行开发,我注意到bootstrap静态文件正在使用静态目录中的文件,而不是static_root

我错过了什么吗?我需要在模板中加载任何内容吗?

2 个答案:

答案 0 :(得分:4)

was encountered before。可能的解决方案:

  1. 确保您运行python manage.py collectstatic,以便将第三方静态文件复制到STATIC_ROOTtheir readme中的更多内容)
  2. 如果您在开发模式下运行,则必须添加为urls提供视图的静态文件(帮助程序链接#1#2
  3. 确保您的模板在{{form.media}}中的某个位置或基础HTML中<head>标记的末尾有<body>。 (example

答案 1 :(得分:1)

实际上没有人要求提供模板。 基于此https://docs.djangoproject.com/en/2.0/topics/forms/media/ 这是形式。媒体做了伎俩。我没有使用自己的表单名称进行.media调用。

这是我的html模板文件,其中包含显示地图的字段。

{% extends 'employee/base.html' %}
{% load bootstrap3 %}

{% block page %}
  <div class="col-lg-12">
    <div class="panel">
      <div class="panel-heading bg-blue">
        <h4 class="panel-title text-center text-white">
          Company Settings
        </h4>
      </div>
        <div class="panel-body">         
          {{ companysetting_form.media }} <--- this did the trick
          <h4>Company Login Name: <a href="{% url 'employee-companychangename' %}">{{ request.user.employee.company.companyname }}</a></h4> 
          <form method="POST" enctype="multipart/form-data">
            {% csrf_token %}            
            {% bootstrap_form companysetting_form %}
            <button type="submit" class="btn btn-pink">Update</button>
          </form>

        </div>
      </div>
    </div>
{% endblock %}