【问题标题】:MemoryError when passing big QuerySet from Views to Template (Django, PostgreSQL)将大查询集从视图传递到模板(Django、PostgreSQL)时出现内存错误
【发布时间】:2017-08-20 12:23:29
【问题描述】:

我正在构建一个与 GIS 相关的 Web 应用程序,它在地图上显示数据库内容的方式非常简单:视图收集了几个(当前 122 个)GeoJSON 文件并将它们传递给模板。模板迭代所有这些并显示它们(使用 Leaflet)。但是,我无法让它工作,因为每次尝试都会导致内存错误。

我使用的数据库是 PostgreSQL 数据库,以防万一。我也在模型中使用了 TextField,这可能是问题的根源吗?

任何建议将不胜感激:)

观点:

geodata = GeojsonData.objects.filter(connection = my_con).iterator()
view = "map"
return render(request, "map.html", {'geojsonData': geodata})

模板:

{% for dat in geojsonData %}
{% with dat.name as name %}
{% with dat.geodata as gj %}

{{gj}}

L.geoJSON(name).addTo(map);


{% endwith %}
{% endwith %}
{% endfor %}

型号:

class GeojsonData(models.Model):
    name = models.CharField(max_length=2000, unique=True)
    connection= models.ForeignKey(Connection, related_name='Connection', default=1)
    geodata = models.TextField()

回溯:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/map/1/

Django Version: 1.11.4
Python Version: 3.6.2
Installed Applications:
['django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'myapp.apps.myappConfig']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']



Traceback:

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\exception.py" in inner
  41.             response = get_response(request)

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\core\handlers\base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\contrib\auth\decorators.py" in _wrapped_view
  23.                 return view_func(request, *args, **kwargs)

File "C:\Users\Xabi\Desktop\...\views.py" in mapa
  92.       return render(request, "map.html", {'geojsonData': geodata})

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\shortcuts.py" in render
  31.     return HttpResponse(content, content_type, status)

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\http\response.py" in __init__
  303.         self.content = content

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\http\response.py" in content
  336.             content = self.make_bytes(value)

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\http\response.py" in make_bytes
  247.             return bytes(value.encode(self.charset))

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\functional.py" in _curried
  15.         return _curried_func(*(args + moreargs), **dict(kwargs, **morekwargs))

File "C:\Users\Xabi\AppData\Local\Programs\Python\Python36-32\lib\site-packages\django\utils\safestring.py" in _proxy_method
  107.             return SafeBytes(data)

Exception Type: MemoryError at /map/1/
Exception Value: 

【问题讨论】:

    标签: django postgresql web-applications


    【解决方案1】:

    不确定您是否已经解决了问题。但也许您可以在 python 中执行循环并将最终结果传递给您的模板,而不是在模板中执行循环?

    【讨论】:

      猜你喜欢
      • 2018-07-10
      • 2015-09-18
      • 2015-07-07
      • 2018-02-10
      • 2017-04-26
      • 2016-09-28
      • 2020-03-19
      • 2019-02-16
      • 1970-01-01
      相关资源
      最近更新 更多