Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
GeoInt_SIDT
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Mario Chirinos Colunga
GeoInt_SIDT
Commits
25608314
Commit
25608314
authored
Mar 13, 2019
by
Emmanuel René Huchim Puc
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'images_map' into dev
parents
5e2a6943
a24b08c7
Changes
16
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
1021 additions
and
499 deletions
+1021
-499
administration_aside.html
administration/templates/administration_aside.html
+9
-0
dashboard.html
administration/templates/dashboard.html
+1
-1
views.py
administration/views.py
+4
-4
scldata.css
reports/static/reports/css/scldata.css
+25
-0
minimap.js
reports/static/reports/js/minimap.js
+55
-0
reportImg.js
reports/static/reports/js/reportImg.js
+61
-32
L2ASCL_data.html
reports/templates/L2ASCL_data.html
+175
-125
Reports.html
reports/templates/Reports.html
+9
-0
aside.html
reports/templates/aside.html
+19
-0
urls.py
reports/urls.py
+3
-1
views.py
reports/views.py
+180
-50
User_profile.html
users/templates/User_profile.html
+129
-226
profile.html
users/templates/profile.html
+40
-46
users_aside.html
users/templates/users_aside.html
+9
-0
urls.py
users/urls.py
+1
-0
views.py
users/views.py
+301
-14
No files found.
administration/templates/administration_aside.html
View file @
25608314
...
...
@@ -28,5 +28,14 @@
</span>
</a>
</li>
<li>
<a
class=
"treeview "
href=
"#"
onclick=
"window.history.back();"
>
<i
class=
"fa fa-backward"
></i>
<span>
Back
</span>
<span
class=
"pull-right-container"
>
<span
class=
"label label-primary pull-right"
></span>
</span>
</a>
</li>
</ul>
</div>
\ No newline at end of file
administration/templates/dashboard.html
View file @
25608314
...
...
@@ -194,7 +194,7 @@
<!-- /.info-box-content -->
</div>
<!-- /.info-box -->
</div>
</div>
<div
class=
"col-md-2 col-sm-6 col-xs-12"
>
<div
class=
"info-box"
>
...
...
administration/views.py
View file @
25608314
...
...
@@ -231,13 +231,13 @@ def to_if(name):
#-----------------------------------------------
def
best_unit_size
(
bytes_size
):
"""
Obtenga un tama
ño en bytes y convié
rtalo en el mejor prefijo IEC para facilitar la lectura.
Obtenga un tama
no en bytes y convie
rtalo en el mejor prefijo IEC para facilitar la lectura.
Devuelva un diccionario con tres pares de claves / valores:
"s" - (flotador) Tama
ño del camino convertido a la mejor unidad para una fá
cil lectura
"s" - (flotador) Tama
no del camino convertido a la mejor unidad para una fa
cil lectura
"u" - (str) El prefijo (IEC) para s (de bytes (2 ^ 0) a YiB (2 ^ 80))
"b" - (int / long) El tama
ñ
o original en bytes
"b" - (int / long) El tama
n
o original en bytes
"""
for
exp
in
range
(
0
,
90
,
10
):
...
...
@@ -249,4 +249,4 @@ def best_unit_size(bytes_size):
return
str
(
round
(
bu_size
,
2
))
+
" "
+
unit
#------------------------------------------------
\ No newline at end of file
reports/static/reports/css/scldata.css
View file @
25608314
...
...
@@ -26,11 +26,36 @@ body
height
:
550px
;
/*should be the same height as the images*/
}
.listImg
{
z-index
:
4
;
}
.listImg
ul
{
list-style
:
none
;
padding
:
0px
;
margin
:
0px
;
cursor
:
pointer
;
}
.listImg
ul
li
:hover
{
background
:
#87CEFA
;
}
.listImg
ul
.active
{
color
:
red
}
.list
{
max-height
:
220px
;
overflow
:
auto
;
}
.img-comp-img
{
position
:
absolute
;
width
:
auto
;
height
:
auto
;
overflow
:
hidden
;
z-index
:
2
;
}
.img-comp-img
img
{
...
...
reports/static/reports/js/minimap.js
0 → 100644
View file @
25608314
// set defaults http://localhost:8000/reports/tiles/2z68/T14QMG/20190127/10/230/569.png
MAPBOX_ACCESS_TOKEN
=
'pk.eyJ1IjoibWFwYm94IiwiYSI6ImNpejY4NXVycTA2emYycXBndHRqcmZ3N3gifQ.rJcFIG214AriISLbB6B5aw'
;
// Create layers
var
imagelayer
;
var
mapbox
=
new
ol
.
layer
.
Tile
({
source
:
new
ol
.
source
.
XYZ
({
url
:
'https://api.tiles.mapbox.com/v4/mapbox.light/{z}/{x}/{y}.png?access_token='
+
MAPBOX_ACCESS_TOKEN
})
});
// create map
var
map
=
new
ol
.
Map
({
target
:
'minimap'
,
layers
:
[
mapbox
],
view
:
new
ol
.
View
({
center
:
ol
.
proj
.
fromLonLat
([
-
99.19
,
19.61
]),
zoom
:
4
,
minZoom
:
4
,
maxZoom
:
14
})
});
//addLayer
function
addImageLayer
(
labelDate
)
{
map
.
removeLayer
(
imagelayer
)
var
xyz
=
new
ol
.
layer
.
Tile
({
opacity
:
0.5
,
source
:
new
ol
.
source
.
XYZ
({
projection
:
'EPSG:3857'
,
url
:
'/reports/tiles/'
+
purchase_id
+
'/'
+
zone
+
'/'
+
labelDate
+
'/{z}/{x}/{-y}.png'
,
tilePixelRatio
:
2
,
minZoom
:
9
,
maxZoom
:
14
})
});
imagelayer
=
xyz
;
map
.
addLayer
(
xyz
);
$
.
ajax
({
type
:
'POST'
,
dataType
:
"json"
,
data
:
{
'purchase_id'
:
purchase_id
,
'report'
:
zone
,
'date'
:
labelDate
},
url
:
'/reports/tiles/tileinfo'
,
success
:
function
(
data
)
{
var
extent
=
ol
.
proj
.
transformExtent
(
data
.
boundingBox
,
'EPSG:4326'
,
'EPSG:3857'
);
map
.
getView
().
fit
(
extent
,
{
duration
:
800
})
},
error
:
function
(
data
)
{
console
.
error
(
"request error: "
,
{
'msg'
:
'tile info request failed'
});
}
});
}
reports/static/reports/js/reportImg.js
View file @
25608314
...
...
@@ -13,12 +13,9 @@ var reportImg = activePoints[0];
// mostrar imagen al dar click en los puntos
document
.
getElementById
(
"myChart"
).
onclick
=
function
(
evt
)
{
if
(
slider
!=
false
)
{
deleteComparisons
()
}
stop
();
console
.
log
(
"on click"
)
console
.
log
(
"evento: "
)
console
.
log
(
evt
)
// activePoints = myChart.getElementsAtEvent(evt);
...
...
@@ -27,11 +24,12 @@ document.getElementById("myChart").onclick = function (evt) {
console
.
log
(
activePoint
)
console
.
log
(
activePoint
.
length
)
if
(
activePoint
.
length
>
0
){
var
firstPoint
=
activePoint
[
0
];
//console.log(firstPoint)
//console.log(firstPoint._datasetIndex) //indice de la clase a la que pertenece (vegetación, agua, etc.)
var
label
=
myChart
.
data
.
labels
[
firstPoint
.
_index
];
addImageLayer
(
label
)
console
.
log
(
"label: "
)
console
.
log
(
label
)
//console.log(myChart.legend.legendItems[firstPoint._datasetIndex].text) //nombre de la capa a la que pertenece (vegetación, agua, etc.)
...
...
@@ -44,8 +42,6 @@ document.getElementById("myChart").onclick = function (evt) {
});
var
imagePoint
=
activePoints
[
imageNumber
];
oldLabel
=
label
.
slice
(
0
,
4
)
+
"/"
+
label
.
slice
(
4
,
6
)
+
"/"
+
label
.
slice
(
6
);
document
.
getElementById
(
"satImageSecond"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
image_path
+
label
+
"_TCI_60m.jpg"
updateImage
(
imagePoint
);
//updateImage(firstPoint);
//alert("{{ IMAGE_PATH }}"+label+"_TCI_60m.jpg");
...
...
@@ -62,28 +58,29 @@ function play() {
// $(".next").hide();
// $(".prev").hide();
// $("#showImage").addClass('col-lg-offset-1');
if
(
slider
==
false
)
{
document
.
getElementById
(
"titleMap"
).
innerHTML
=
oldLabel
+
" vs "
+
oldLabel
;
initComparisons
()
}
playImages
=
setInterval
(
function
()
{
next
();
},
4000
);
}
//****************************
//****************************
function
scl_on
(
imagePoint
)
{
console
.
log
(
"scl on!!"
)
label
=
imagePoint
;
//console.log({{SCL_PATH}})
document
.
getElementById
(
"satImage"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/{{SCL_PATH}}"
+
label
+
"_SCL_60m_clasificationMap.png"
// $(".next").show();
// $(".prev").show();
// $(".prev").show();
}
function
scl_stop
()
{
console
.
log
(
"scl off!!"
)
function
open_big_image
(
image
)
{
console
.
log
(
"Opening big image"
)
console
.
log
(
"image:"
)
console
.
log
(
image
)
image_big
=
image
.
replace
(
"/thumbnails"
,
""
);
console
.
log
(
image_big
)
window
.
open
(
image_big
)
// $(".next").show();
// $(".prev").show();
}
// $(".prev").show();
}
//********************************
function
stop
()
{
...
...
@@ -92,7 +89,7 @@ function stop() {
$
(
"#play"
).
show
();
$
(
"#stop"
).
hide
();
// $(".next").show();
// $(".prev").show();
// $(".prev").show();
}
// cambiar el tipo de gráfica
...
...
@@ -128,14 +125,11 @@ function updateImage(imagePoint) {
label
=
imagePoint
;
reportImg
=
imagePoint
;
titleLabel
=
label
.
slice
(
0
,
4
)
+
"/"
+
label
.
slice
(
4
,
6
)
+
"/"
+
label
.
slice
(
6
);
if
(
slider
!=
false
)
{
document
.
getElementById
(
"titleMap"
).
innerHTML
=
oldLabel
+
" vs "
+
titleLabel
;
}
else
{
document
.
getElementById
(
"titleMap"
).
innerHTML
=
titleLabel
;
}
document
.
getElementById
(
"titleMap"
).
innerHTML
=
titleLabel
;
document
.
getElementById
(
"titleSCL"
).
innerHTML
=
titleLabel
document
.
getElementById
(
"satImage"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
image_path
+
label
+
"_TCI_60m.jpg"
document
.
getElementById
(
"scl_saturated"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_saturated.png"
document
.
getElementById
(
"scl_shadows"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_shadows.png"
document
.
getElementById
(
"scl_cloud_shadows"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_cloud_shadows.png"
...
...
@@ -147,7 +141,7 @@ function updateImage(imagePoint) {
document
.
getElementById
(
"scl_cloud_high_probability"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_cloud_high_probability.png"
document
.
getElementById
(
"scl_thin_cirrus"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_thin_cirrus.png"
document
.
getElementById
(
"scl_snow"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
scl_path
+
label
+
"_SCL_60m_snow.png"
//document.getElementById("scl_vegetation").src = "../../static/reports/tmpImages/repsat_test_dev/" + scl_path + label + "_SCL_60m_vegetation.png"
}
...
...
@@ -174,11 +168,11 @@ function change(newType) {
let
img
,
imgWidth
=
0
,
slider
=
false
,
clicked
=
0
;
function
initComparisons
()
{
$
(
"#showSecondImage"
).
show
()
setTimeout
(
function
()
{
//
$("#showSecondImage").show()
//
setTimeout(function() {
img
=
document
.
getElementsByClassName
(
"img-comp-overlay"
)[
0
];
compareImages
(
img
);
});
//
});
// setTimeout(function(){
// img = document.getElementsByClassName("img-comp-overlay")[0];
// compareImages(img);
...
...
@@ -194,7 +188,7 @@ function compareImages(img) {
img
.
style
.
width
=
((
imgWidth
/
2
))
+
15
+
"px"
;
/*create slider:*/
slider
=
document
.
createElement
(
"DIV"
);
slider
.
setAttribute
(
"class"
,
"img-comp-slider col-lg-offset-
1 col-md-offset-1
col-xs-offset-2"
);
slider
.
setAttribute
(
"class"
,
"img-comp-slider col-lg-offset-
2 col-md-offset-2
col-xs-offset-2"
);
/*insert slider*/
img
.
parentElement
.
insertBefore
(
slider
,
img
);
/*position the slider in the middle:*/
...
...
@@ -260,14 +254,49 @@ function slide(x) {
function
deleteComparisons
(){
slider
.
removeEventListener
(
"mousedown"
,
slideReady
);
slider
.
removeEventListener
(
"touchstart"
,
slideReady
);
window
.
removeEventListener
(
"mouseup"
,
slideFinish
)
;
window
.
removeEventListener
(
"mouseup"
,
slideFinish
)
;
window
.
removeEventListener
(
"touchstop"
,
slideFinish
);
window
.
removeEventListener
(
"mousemove"
,
slideMove
);
window
.
removeEventListener
(
"touchmove"
,
slideMove
);
$
(
".img-comp-slider"
).
remove
();
$
(
"#showSecondImage"
).
hide
()
slider
=
false
;
}
//deleteComparisons();
//initComparisons();
\ No newline at end of file
//initComparisons();
function
selectImage1
(
date
,
element
)
{
$
(
"#imageListFirst li"
).
removeClass
(
"active"
);
element
.
classList
.
add
(
"active"
);
let
label
=
date
.
toString
();
label
=
label
.
slice
(
0
,
4
)
+
"/"
+
label
.
slice
(
4
,
6
)
+
"/"
+
label
.
slice
(
6
);
document
.
getElementById
(
"titleImageFirst"
).
innerHTML
=
label
;
document
.
getElementById
(
"satImageFirst"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
image_path
+
date
+
"_TCI_60m.jpg"
}
function
selectImage2
(
date
,
element
)
{
$
(
"#imageListSecond li"
).
removeClass
(
"active"
);
element
.
classList
.
add
(
"active"
);
let
label
=
date
.
toString
();
label
=
label
.
slice
(
0
,
4
)
+
"/"
+
label
.
slice
(
4
,
6
)
+
"/"
+
label
.
slice
(
6
);
document
.
getElementById
(
"titleImageSecond"
).
innerHTML
=
label
;
document
.
getElementById
(
"satImageSecond"
).
src
=
"../../static/reports/tmpImages/repsat_test_dev/"
+
image_path
+
date
+
"_TCI_60m.jpg"
}
$
(
'.nav-tabs a'
).
on
(
'shown.bs.tab'
,
function
(
evt
)
{
let
tab
=
$
(
evt
.
target
).
text
();
if
(
tab
==
"Comparison"
){
initComparisons
()
}
});
$
(
'.nav-tabs a'
).
on
(
'hide.bs.tab'
,
function
(
evt
)
{
let
tab
=
$
(
evt
.
target
).
text
();
if
(
tab
==
"Comparison"
)
{
deleteComparisons
();
}
if
(
tab
==
"Images"
)
{
stop
();
}
});
reports/templates/L2ASCL_data.html
View file @
25608314
This diff is collapsed.
Click to expand it.
reports/templates/Reports.html
View file @
25608314
...
...
@@ -126,6 +126,15 @@
</span>
</a>
</li>
<li>
<a
class=
"treeview "
href=
"#"
onclick=
"window.history.back();"
>
<i
class=
"fa fa-backward"
></i>
<span>
Back
</span>
<span
class=
"pull-right-container"
>
<span
class=
"label label-primary pull-right"
></span>
</span>
</a>
</li>
</ul>
</div>
<!-- form-group-->
...
...
reports/templates/aside.html
View file @
25608314
...
...
@@ -10,6 +10,7 @@
</span>
</a>
</li>
<li
class=
"treeview"
>
<a
href=
"#"
>
<i
class=
"fa fa-file-archive-o"
></i>
...
...
@@ -134,7 +135,25 @@
</span>
</a>
</li>
<li>
<a
class=
"treeview submenu"
href=
"../../static/reports/tmpImages/repsat_test_dev/{{ request.user.email }}/{{ purchaseID }}/{{ zone }}.pdf"
id=
"downloadPdf"
>
<i
class=
"fa fa-file-pdf-o"
></i>
<span>
Export to PDF v2
</span>
<span
class=
"pull-right-container"
>
<span
class=
"label label-primary pull-right"
></span>
</span>
</a>
</li>
</ul>
</li>
<li>
<a
class=
"treeview "
href=
"#"
onclick=
"window.history.back();"
>
<i
class=
"fa fa-backward"
></i>
<span>
Back
</span>
<span
class=
"pull-right-container"
>
<span
class=
"label label-primary pull-right"
></span>
</span>
</a>
</li>
</ul>
</div>
\ No newline at end of file
reports/urls.py
View file @
25608314
...
...
@@ -8,5 +8,7 @@ urlpatterns = [
url
(
r'^(?P<purchase_id>(\d+))/(?P<report>[\w\-]+)$'
,
views
.
report_L2ASCL
,
name
=
'report'
),
url
(
r'^$'
,
views
.
Reports
,
name
=
'reports'
),
url
(
r'^ws/process_progress$'
,
views
.
wsProcessProgress
,
name
=
'wsProcessProgress'
),
url
(
r'^tiles/(?P<purchase_id>(\d+))/(?P<report>[\w\-]+)/(?P<date>[0-9]+)/(?P<z>[0-9]+)/(?P<x>[0-9]+)/(?P<y>[0-9]+).png$'
,
views
.
tiles
,
name
=
'tile'
),
url
(
r'^tiles/tileinfo$'
,
views
.
tileinfo
,
name
=
'tileinfo'
),
]
reports/views.py
View file @
25608314
This diff is collapsed.
Click to expand it.
users/templates/User_profile.html
View file @
25608314
This diff is collapsed.
Click to expand it.
users/templates/profile.html
View file @
25608314
{% load staticfiles %}
{% for data in user_data %}
<div
class=
"col-md-3"
>
<div
class=
"col-md-3"
>
{% for data in user_data %}
<!-- Profile Image -->
<div
class=
"box box-primary"
>
<div
class=
"box-body box-profile"
>
<br>
<img
class=
"profile-user-img img-responsive img-circle"
src=
"{% static 'users/images/user_default.png' %}"
alt=
"User profile picture"
>
<h3
class=
"profile-username text-center"
>
{{ data.user_fullname }}
</h3>
<input
type=
"hidden"
id=
"user_id"
value=
"{{ data.user_id }}"
>
<p
class=
"text-muted text-center"
>
Software Engineer
</p>
<ul
class=
"list-group list-group-unbordered"
>
<li
class=
"list-group-item"
>
<b>
Searches
</b>
<a
class=
"pull-right"
>
{{ data.searches }}
</a>
<i
class=
"fa fa-search margin-r-5"
></i>
<b>
Searches
</b>
<a
class=
"pull-right"
>
{{ data.searches }}
</a>
</li>
<li
class=
"list-group-item"
>
<i
class=
"fa fa-shopping-cart margin-r-5"
></i>
<b>
Purchases
</b>
<a
class=
"pull-right"
>
{{ data.purchases }}
</a>
</li>
<li
class=
"list-group-item"
>
<b>
Purchases
</b>
<a
class=
"pull-right"
>
{{ data.purchases }}
</a>
<i
class=
"fa fa-download margin-r-5"
></i>
<b>
In Process
</b>
<a
class=
"pull-right"
>
{{ data.in_process }}
</a>
</li>
<li
class=
"list-group-item"
>
<b>
In Process
</b>
<a
class=
"pull-right"
>
{{ data.in_process }}
</a>
<i
class=
"fa fa-pie-chart margin-r-5"
></i>
<b>
Disk usage
</b>
<a
class=
"pull-right"
>
{{ data.size }}
</a>
</li>
</ul>
...
...
@@ -28,48 +37,33 @@
<!-- /.box-body -->
</div>
<!-- /.box -->
<div>
<br>
</div>
<!-- About Me Box -->
<div
class=
"box box-primary"
>
<div
class=
"box-header with-border"
>
<h3
class=
"box-title"
>
About Me
</h3>
</div>
<!-- /.box-header -->
<div
class=
"box-body"
>
<strong><i
class=
"fa fa-book margin-r-5"
></i>
Education
</strong>
<p
class=
"text-muted"
>
B.S. in Computer Science from the University of Tennessee at Knoxville
</p>
<hr>
<strong><i
class=
"fa fa-map-marker margin-r-5"
></i>
Location
</strong>
<p
class=
"text-muted"
>
Malibu, California
</p>
<hr>
{% endfor %}
<div>
<br>
</div>
<strong><i
class=
"fa fa-pencil margin-r-5"
></i>
Skills
</strong>
<!-- About Me Box -->
<div
class=
"box box-primary"
>
<p>
<span
class=
"label label-danger"
>
UI Design
</span>
<span
class=
"label label-success"
>
Coding
</span>
<span
class=
"label label-info"
>
Javascript
</span>
<span
class=
"label label-warning"
>
PHP
</span>
<span
class=
"label label-primary"
>
Node.js
</span>
</p>
<div
class=
"box-header with-border"
>
<h3
class=
"box-title"
>
Searches
</h3>
</div>
<!-- /.box-header -->
<div
class=
"box-body"
>
<ul
class=
"list-group list-group-unbordered"
>
{% for data in user_searches %}
<li
class=
"list-group-item"
>
<i
class=
"fa fa-map-marker margin-r-5"
></i>
<b>
{{ data.search_name }}
</b>
<a
class=
"pull-right"
>
{{ data.count }}
</a>
</li>
{% endfor %}
</ul>
</div>
<!-- /.box-body -->
<hr
>
</div
>
<strong><i
class=
"fa fa-file-text-o margin-r-5"
></i>
Notes
</strong>
<!-- /.box -->
<div><br></div>
</div>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam fermentum enim neque.
</p>
</div>
<!-- /.box-body -->
</div>
<!-- /.box -->
</div>
{% endfor %}
\ No newline at end of file
users/templates/users_aside.html
View file @
25608314
...
...
@@ -28,5 +28,14 @@
</span>
</a>
</li-->
<li>
<a
class=
"treeview "
href=
"#"
onclick=
"window.history.back();"
>
<i
class=
"fa fa-backward"
></i>
<span>
Back
</span>
<span
class=
"pull-right-container"
>
<span
class=
"label label-primary pull-right"
></span>
</span>
</a>
</li>
</ul>
</div>
\ No newline at end of file
users/urls.py
View file @
25608314
...
...
@@ -26,5 +26,6 @@ from users import views
urlpatterns
=
[
url
(
r'^$'
,
views
.
Users
,
name
=
'users'
),
url
(
r'^(?P<user_id>(\d+))/$'
,
views
.
User_id
,
name
=
'user_id'
),
url
(
r'^ws/report_table$'
,
views
.
wsPurchasesPM
,
name
=
'wsPurchasesPM'
),
]
# + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
users/views.py
View file @
25608314
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment