Replaced print statement by print function (forward compatibility syntax).
This commit is contained in:
parent
fe43ad5707
commit
596cb9c7e2
|
@ -24,7 +24,7 @@ def gather_stats(p):
|
|||
prof = stats.load(os.path.join(p, f))
|
||||
else:
|
||||
continue
|
||||
print "Processing %s" % f
|
||||
print("Processing %s" % f)
|
||||
if path in profiles:
|
||||
profiles[path].add(prof)
|
||||
else:
|
||||
|
|
|
@ -11,7 +11,7 @@ def unique_messages():
|
|||
elif os.path.isdir('locale'):
|
||||
basedir = os.path.abspath('locale')
|
||||
else:
|
||||
print "This script should be run from the Django Git tree or your project or app tree."
|
||||
print("This script should be run from the Django Git tree or your project or app tree.")
|
||||
sys.exit(1)
|
||||
|
||||
for (dirpath, dirnames, filenames) in os.walk(basedir):
|
||||
|
|
|
@ -54,7 +54,7 @@ def create_permissions(app, created_models, verbosity, **kwargs):
|
|||
auth_app.Permission.objects.bulk_create(objs)
|
||||
if verbosity >= 2:
|
||||
for obj in objs:
|
||||
print "Adding permission '%s'" % obj
|
||||
print("Adding permission '%s'" % obj)
|
||||
|
||||
|
||||
def create_superuser(app, created_models, verbosity, db, **kwargs):
|
||||
|
|
|
@ -39,7 +39,7 @@ def update_contenttypes(app, created_models, verbosity=2, **kwargs):
|
|||
])
|
||||
if verbosity >= 2:
|
||||
for ct in cts:
|
||||
print "Adding content type '%s | %s'" % (ct.app_label, ct.model)
|
||||
print("Adding content type '%s | %s'" % (ct.app_label, ct.model))
|
||||
|
||||
# Confirm that the content type is stale before deletion.
|
||||
if to_remove:
|
||||
|
@ -63,11 +63,11 @@ If you're unsure, answer 'no'.
|
|||
if ok_to_delete == 'yes':
|
||||
for ct in to_remove:
|
||||
if verbosity >= 2:
|
||||
print "Deleting stale content type '%s | %s'" % (ct.app_label, ct.model)
|
||||
print("Deleting stale content type '%s | %s'" % (ct.app_label, ct.model))
|
||||
ct.delete()
|
||||
else:
|
||||
if verbosity >= 2:
|
||||
print "Stale content types remain."
|
||||
print("Stale content types remain.")
|
||||
|
||||
def update_all_contenttypes(verbosity=2, **kwargs):
|
||||
for app in get_apps():
|
||||
|
|
|
@ -24,7 +24,7 @@ class SpatiaLiteCreation(DatabaseCreation):
|
|||
test_db_repr = ''
|
||||
if verbosity >= 2:
|
||||
test_db_repr = " ('%s')" % test_database_name
|
||||
print "Creating test database for alias '%s'%s..." % (self.connection.alias, test_db_repr)
|
||||
print("Creating test database for alias '%s'%s..." % (self.connection.alias, test_db_repr))
|
||||
|
||||
self._create_test_db(verbosity, autoclobber)
|
||||
|
||||
|
|
|
@ -13,21 +13,21 @@
|
|||
>>> from django.contrib.gis.gdal import OGRGeometry, OGRGeomType, SpatialReference
|
||||
>>> wkt1, wkt2 = 'POINT(-90 30)', 'POLYGON((0 0, 5 0, 5 5, 0 5)'
|
||||
>>> pnt = OGRGeometry(wkt1)
|
||||
>>> print pnt
|
||||
>>> print(pnt)
|
||||
POINT (-90 30)
|
||||
>>> mpnt = OGRGeometry(OGRGeomType('MultiPoint'), SpatialReference('WGS84'))
|
||||
>>> mpnt.add(wkt1)
|
||||
>>> mpnt.add(wkt1)
|
||||
>>> print mpnt
|
||||
>>> print(mpnt)
|
||||
MULTIPOINT (-90 30,-90 30)
|
||||
>>> print mpnt.srs.name
|
||||
>>> print(mpnt.srs.name)
|
||||
WGS 84
|
||||
>>> print mpnt.srs.proj
|
||||
>>> print(mpnt.srs.proj)
|
||||
+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
|
||||
>>> mpnt.transform_to(SpatialReference('NAD27'))
|
||||
>>> print mpnt.proj
|
||||
>>> print(mpnt.proj)
|
||||
+proj=longlat +ellps=clrk66 +datum=NAD27 +no_defs
|
||||
>>> print mpnt
|
||||
>>> print(mpnt)
|
||||
MULTIPOINT (-89.999930378602485 29.999797886557641,-89.999930378602485 29.999797886557641)
|
||||
|
||||
The OGRGeomType class is to make it easy to specify an OGR geometry type:
|
||||
|
@ -35,8 +35,8 @@
|
|||
>>> gt1 = OGRGeomType(3) # Using an integer for the type
|
||||
>>> gt2 = OGRGeomType('Polygon') # Using a string
|
||||
>>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive
|
||||
>>> print gt1 == 3, gt1 == 'Polygon' # Equivalence works w/non-OGRGeomType objects
|
||||
True
|
||||
>>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects
|
||||
True True
|
||||
"""
|
||||
# Python library requisites.
|
||||
import sys
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
Example:
|
||||
>>> from django.contrib.gis.gdal import SpatialReference
|
||||
>>> srs = SpatialReference('WGS84')
|
||||
>>> print srs
|
||||
>>> print(srs)
|
||||
GEOGCS["WGS 84",
|
||||
DATUM["WGS_1984",
|
||||
SPHEROID["WGS 84",6378137,298.257223563,
|
||||
|
@ -16,14 +16,14 @@
|
|||
UNIT["degree",0.01745329251994328,
|
||||
AUTHORITY["EPSG","9122"]],
|
||||
AUTHORITY["EPSG","4326"]]
|
||||
>>> print srs.proj
|
||||
>>> print(srs.proj)
|
||||
+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs
|
||||
>>> print srs.ellipsoid
|
||||
>>> print(srs.ellipsoid)
|
||||
(6378137.0, 6356752.3142451793, 298.25722356300003)
|
||||
>>> print srs.projected, srs.geographic
|
||||
>>> print(srs.projected, srs.geographic)
|
||||
False True
|
||||
>>> srs.import_epsg(32140)
|
||||
>>> print srs.name
|
||||
>>> print(srs.name)
|
||||
NAD83 / Texas South Central
|
||||
"""
|
||||
from ctypes import byref, c_char_p, c_int
|
||||
|
@ -103,19 +103,19 @@ class SpatialReference(GDALBase):
|
|||
|
||||
>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]')
|
||||
>>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326
|
||||
>>> print srs['GEOGCS']
|
||||
>>> print(srs['GEOGCS'])
|
||||
WGS 84
|
||||
>>> print srs['DATUM']
|
||||
>>> print(srs['DATUM'])
|
||||
WGS_1984
|
||||
>>> print srs['AUTHORITY']
|
||||
>>> print(srs['AUTHORITY'])
|
||||
EPSG
|
||||
>>> print srs['AUTHORITY', 1] # The authority value
|
||||
>>> print(srs['AUTHORITY', 1]) # The authority value
|
||||
4326
|
||||
>>> print srs['TOWGS84', 4] # the fourth value in this wkt
|
||||
>>> print(srs['TOWGS84', 4]) # the fourth value in this wkt
|
||||
0
|
||||
>>> print srs['UNIT|AUTHORITY'] # For the units authority, have to use the pipe symbole.
|
||||
>>> print(srs['UNIT|AUTHORITY']) # For the units authority, have to use the pipe symbole.
|
||||
EPSG
|
||||
>>> print srs['UNIT|AUTHORITY', 1] # The authority value for the untis
|
||||
>>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the untis
|
||||
9122
|
||||
"""
|
||||
if isinstance(target, tuple):
|
||||
|
|
|
@ -59,7 +59,7 @@ class DataSourceTest(unittest.TestCase):
|
|||
|
||||
def test03a_layers(self):
|
||||
"Testing Data Source Layers."
|
||||
print "\nBEGIN - expecting out of range feature id error; safe to ignore.\n"
|
||||
print("\nBEGIN - expecting out of range feature id error; safe to ignore.\n")
|
||||
for source in ds_list:
|
||||
ds = DataSource(source.ds)
|
||||
|
||||
|
@ -108,7 +108,7 @@ class DataSourceTest(unittest.TestCase):
|
|||
# the feature values here while in this loop.
|
||||
for fld_name in fld_names:
|
||||
self.assertEqual(source.field_values[fld_name][i], feat.get(fld_name))
|
||||
print "\nEND - expecting out of range feature id error; safe to ignore."
|
||||
print("\nEND - expecting out of range feature id error; safe to ignore.")
|
||||
|
||||
def test03b_layer_slice(self):
|
||||
"Test indexing and slicing on Layers."
|
||||
|
|
|
@ -234,7 +234,7 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
|
|||
# Both rings in this geometry are not closed.
|
||||
poly = OGRGeometry('POLYGON((0 0, 5 0, 5 5, 0 5), (1 1, 2 1, 2 2, 2 1))')
|
||||
self.assertEqual(8, poly.point_count)
|
||||
print "\nBEGIN - expecting IllegalArgumentException; safe to ignore.\n"
|
||||
print("\nBEGIN - expecting IllegalArgumentException; safe to ignore.\n")
|
||||
try:
|
||||
c = poly.centroid
|
||||
except OGRException:
|
||||
|
@ -242,7 +242,7 @@ class OGRGeomTest(unittest.TestCase, TestDataMixin):
|
|||
pass
|
||||
else:
|
||||
self.fail('Should have raised an OGRException!')
|
||||
print "\nEND - expecting IllegalArgumentException; safe to ignore.\n"
|
||||
print("\nEND - expecting IllegalArgumentException; safe to ignore.\n")
|
||||
|
||||
# Closing the rings -- doesn't work on GDAL versions 1.4.1 and below:
|
||||
# http://trac.osgeo.org/gdal/ticket/1673
|
||||
|
|
|
@ -134,7 +134,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
def test01d_errors(self):
|
||||
"Testing the Error handlers."
|
||||
# string-based
|
||||
print "\nBEGIN - expecting GEOS_ERROR; safe to ignore.\n"
|
||||
print("\nBEGIN - expecting GEOS_ERROR; safe to ignore.\n")
|
||||
for err in self.geometries.errors:
|
||||
try:
|
||||
g = fromstr(err.wkt)
|
||||
|
@ -144,7 +144,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
# Bad WKB
|
||||
self.assertRaises(GEOSException, GEOSGeometry, buffer('0'))
|
||||
|
||||
print "\nEND - expecting GEOS_ERROR; safe to ignore.\n"
|
||||
print("\nEND - expecting GEOS_ERROR; safe to ignore.\n")
|
||||
|
||||
class NotAGeometry(object):
|
||||
pass
|
||||
|
@ -439,7 +439,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
|
||||
def test05b_multipolygons(self):
|
||||
"Testing MultiPolygon objects."
|
||||
print "\nBEGIN - expecting GEOS_NOTICE; safe to ignore.\n"
|
||||
print("\nBEGIN - expecting GEOS_NOTICE; safe to ignore.\n")
|
||||
prev = fromstr('POINT (0 0)')
|
||||
for mp in self.geometries.multipolygons:
|
||||
mpoly = fromstr(mp.wkt)
|
||||
|
@ -458,7 +458,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
self.assertEqual(p.valid, True)
|
||||
self.assertEqual(mpoly.wkt, MultiPolygon(*tuple(poly.clone() for poly in mpoly)).wkt)
|
||||
|
||||
print "\nEND - expecting GEOS_NOTICE; safe to ignore.\n"
|
||||
print("\nEND - expecting GEOS_NOTICE; safe to ignore.\n")
|
||||
|
||||
def test06a_memory_hijinks(self):
|
||||
"Testing Geometry __del__() on rings and polygons."
|
||||
|
@ -995,7 +995,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
self.assertTrue(isinstance(g.valid_reason, basestring))
|
||||
self.assertEqual(g.valid_reason, "Valid Geometry")
|
||||
|
||||
print "\nBEGIN - expecting GEOS_NOTICE; safe to ignore.\n"
|
||||
print("\nBEGIN - expecting GEOS_NOTICE; safe to ignore.\n")
|
||||
|
||||
g = GEOSGeometry("LINESTRING(0 0, 0 0)")
|
||||
|
||||
|
@ -1003,7 +1003,7 @@ class GEOSTest(unittest.TestCase, TestDataMixin):
|
|||
self.assertTrue(isinstance(g.valid_reason, basestring))
|
||||
self.assertTrue(g.valid_reason.startswith("Too few points in geometry component"))
|
||||
|
||||
print "\nEND - expecting GEOS_NOTICE; safe to ignore.\n"
|
||||
print("\nEND - expecting GEOS_NOTICE; safe to ignore.\n")
|
||||
|
||||
def test28_geos_version(self):
|
||||
"Testing the GEOS version regular expression."
|
||||
|
|
|
@ -22,19 +22,19 @@ def ogrinfo(data_source, num_features=10):
|
|||
raise Exception('Data source parameter must be a string or a DataSource object.')
|
||||
|
||||
for i, layer in enumerate(data_source):
|
||||
print "data source : %s" % data_source.name
|
||||
print "==== layer %s" % i
|
||||
print " shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__
|
||||
print " # features: %s" % len(layer)
|
||||
print " srs: %s" % layer.srs
|
||||
print("data source : %s" % data_source.name)
|
||||
print("==== layer %s" % i)
|
||||
print(" shape type: %s" % GEO_CLASSES[layer.geom_type.num].__name__)
|
||||
print(" # features: %s" % len(layer))
|
||||
print(" srs: %s" % layer.srs)
|
||||
extent_tup = layer.extent.tuple
|
||||
print " extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4])
|
||||
print "Displaying the first %s features ====" % num_features
|
||||
print(" extent: %s - %s" % (extent_tup[0:2], extent_tup[2:4]))
|
||||
print("Displaying the first %s features ====" % num_features)
|
||||
|
||||
width = max(*map(len,layer.fields))
|
||||
fmt = " %%%ss: %%s" % width
|
||||
for j, feature in enumerate(layer[:num_features]):
|
||||
print "=== Feature %s" % j
|
||||
print("=== Feature %s" % j)
|
||||
for fld_name in layer.fields:
|
||||
type_name = feature[fld_name].type_name
|
||||
output = fmt % (fld_name, type_name)
|
||||
|
@ -47,7 +47,7 @@ def ogrinfo(data_source, num_features=10):
|
|||
output += val_fmt % val
|
||||
else:
|
||||
output += ' (None)'
|
||||
print output
|
||||
print(output)
|
||||
|
||||
# For backwards compatibility.
|
||||
sample = ogrinfo
|
||||
|
|
|
@ -68,8 +68,8 @@ def ogrinspect(*args, **kwargs):
|
|||
shp_file = 'data/mapping_hacks/world_borders.shp'
|
||||
model_name = 'WorldBorders'
|
||||
|
||||
print ogrinspect(shp_file, model_name, multi_geom=True, srid=4326,
|
||||
geom_name='shapes', blank=True)
|
||||
print(ogrinspect(shp_file, model_name, multi_geom=True, srid=4326,
|
||||
geom_name='shapes', blank=True))
|
||||
|
||||
Required Arguments
|
||||
`datasource` => string or DataSource object to file pointer
|
||||
|
|
|
@ -18,7 +18,7 @@ def create_default_site(app, created_models, verbosity, db, **kwargs):
|
|||
# the next id will be 1, so we coerce it. See #15573 and #16353. This
|
||||
# can also crop up outside of tests - see #15346.
|
||||
if verbosity >= 2:
|
||||
print "Creating example.com Site object"
|
||||
print("Creating example.com Site object")
|
||||
Site(pk=1, domain="example.com", name="example.com").save(using=db)
|
||||
|
||||
# We set an explicit pk instead of relying on auto-incrementation,
|
||||
|
@ -26,7 +26,7 @@ def create_default_site(app, created_models, verbosity, db, **kwargs):
|
|||
sequence_sql = connections[db].ops.sequence_reset_sql(no_style(), [Site])
|
||||
if sequence_sql:
|
||||
if verbosity >= 2:
|
||||
print "Resetting sequence"
|
||||
print("Resetting sequence")
|
||||
cursor = connections[db].cursor()
|
||||
for command in sequence_sql:
|
||||
cursor.execute(command)
|
||||
|
|
|
@ -299,7 +299,7 @@ class ManagementUtility(object):
|
|||
|
||||
# subcommand
|
||||
if cword == 1:
|
||||
print ' '.join(sorted(filter(lambda x: x.startswith(curr), subcommands)))
|
||||
print(' '.join(sorted(filter(lambda x: x.startswith(curr), subcommands))))
|
||||
# subcommand options
|
||||
# special case: the 'help' subcommand has no options
|
||||
elif cwords[0] in subcommands and cwords[0] != 'help':
|
||||
|
@ -333,7 +333,7 @@ class ManagementUtility(object):
|
|||
# append '=' to options which require args
|
||||
if option[1]:
|
||||
opt_label += '='
|
||||
print opt_label
|
||||
print(opt_label)
|
||||
sys.exit(1)
|
||||
|
||||
def execute(self):
|
||||
|
|
|
@ -173,7 +173,7 @@ def emit_post_sync_signal(created_models, verbosity, interactive, db):
|
|||
for app in models.get_apps():
|
||||
app_name = app.__name__.split('.')[-2]
|
||||
if verbosity >= 2:
|
||||
print "Running post-sync handlers for application", app_name
|
||||
print("Running post-sync handlers for application %s" % app_name)
|
||||
models.signals.post_syncdb.send(sender=app, app=app,
|
||||
created_models=created_models, verbosity=verbosity,
|
||||
interactive=interactive, db=db)
|
||||
|
|
|
@ -82,9 +82,9 @@ Examples:
|
|||
""" % FASTCGI_OPTIONS
|
||||
|
||||
def fastcgi_help(message=None):
|
||||
print FASTCGI_HELP
|
||||
print(FASTCGI_HELP)
|
||||
if message:
|
||||
print message
|
||||
print(message)
|
||||
return False
|
||||
|
||||
def runfastcgi(argset=[], **kwargs):
|
||||
|
@ -103,11 +103,11 @@ def runfastcgi(argset=[], **kwargs):
|
|||
try:
|
||||
import flup
|
||||
except ImportError as e:
|
||||
print >> sys.stderr, "ERROR: %s" % e
|
||||
print >> sys.stderr, " Unable to load the flup package. In order to run django"
|
||||
print >> sys.stderr, " as a FastCGI application, you will need to get flup from"
|
||||
print >> sys.stderr, " http://www.saddi.com/software/flup/ If you've already"
|
||||
print >> sys.stderr, " installed flup, then make sure you have it in your PYTHONPATH."
|
||||
sys.stderr.write("ERROR: %s\n" % e)
|
||||
sys.stderr.write(" Unable to load the flup package. In order to run django\n")
|
||||
sys.stderr.write(" as a FastCGI application, you will need to get flup from\n")
|
||||
sys.stderr.write(" http://www.saddi.com/software/flup/ If you've already\n")
|
||||
sys.stderr.write(" installed flup, then make sure you have it in your PYTHONPATH.\n")
|
||||
return False
|
||||
|
||||
flup_module = 'server.' + options['protocol']
|
||||
|
@ -136,7 +136,7 @@ def runfastcgi(argset=[], **kwargs):
|
|||
module = importlib.import_module('.%s' % flup_module, 'flup')
|
||||
WSGIServer = module.WSGIServer
|
||||
except Exception:
|
||||
print "Can't import flup." + flup_module
|
||||
print("Can't import flup." + flup_module)
|
||||
return False
|
||||
|
||||
# Prep up and go
|
||||
|
|
|
@ -256,8 +256,8 @@ class BaseDatabaseCreation(object):
|
|||
test_db_repr = ''
|
||||
if verbosity >= 2:
|
||||
test_db_repr = " ('%s')" % test_database_name
|
||||
print "Creating test database for alias '%s'%s..." % (
|
||||
self.connection.alias, test_db_repr)
|
||||
print("Creating test database for alias '%s'%s..." % (
|
||||
self.connection.alias, test_db_repr))
|
||||
|
||||
self._create_test_db(verbosity, autoclobber)
|
||||
|
||||
|
@ -339,7 +339,7 @@ class BaseDatabaseCreation(object):
|
|||
if autoclobber or confirm == 'yes':
|
||||
try:
|
||||
if verbosity >= 1:
|
||||
print ("Destroying old test database '%s'..."
|
||||
print("Destroying old test database '%s'..."
|
||||
% self.connection.alias)
|
||||
cursor.execute(
|
||||
"DROP DATABASE %s" % qn(test_database_name))
|
||||
|
@ -351,7 +351,7 @@ class BaseDatabaseCreation(object):
|
|||
"Got an error recreating the test database: %s\n" % e)
|
||||
sys.exit(2)
|
||||
else:
|
||||
print "Tests cancelled."
|
||||
print("Tests cancelled.")
|
||||
sys.exit(1)
|
||||
|
||||
return test_database_name
|
||||
|
@ -367,8 +367,8 @@ class BaseDatabaseCreation(object):
|
|||
test_db_repr = ''
|
||||
if verbosity >= 2:
|
||||
test_db_repr = " ('%s')" % test_database_name
|
||||
print "Destroying test database for alias '%s'%s..." % (
|
||||
self.connection.alias, test_db_repr)
|
||||
print("Destroying test database for alias '%s'%s..." % (
|
||||
self.connection.alias, test_db_repr))
|
||||
|
||||
# Temporarily use a new connection and a copy of the settings dict.
|
||||
# This prevents the production database from being exposed to potential
|
||||
|
|
|
@ -69,19 +69,19 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
if autoclobber or confirm == 'yes':
|
||||
try:
|
||||
if verbosity >= 1:
|
||||
print "Destroying old test database '%s'..." % self.connection.alias
|
||||
print("Destroying old test database '%s'..." % self.connection.alias)
|
||||
self._execute_test_db_destruction(cursor, parameters, verbosity)
|
||||
self._execute_test_db_creation(cursor, parameters, verbosity)
|
||||
except Exception as e:
|
||||
sys.stderr.write("Got an error recreating the test database: %s\n" % e)
|
||||
sys.exit(2)
|
||||
else:
|
||||
print "Tests cancelled."
|
||||
print("Tests cancelled.")
|
||||
sys.exit(1)
|
||||
|
||||
if self._test_user_create():
|
||||
if verbosity >= 1:
|
||||
print "Creating test user..."
|
||||
print("Creating test user...")
|
||||
try:
|
||||
self._create_test_user(cursor, parameters, verbosity)
|
||||
except Exception as e:
|
||||
|
@ -91,16 +91,16 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
if autoclobber or confirm == 'yes':
|
||||
try:
|
||||
if verbosity >= 1:
|
||||
print "Destroying old test user..."
|
||||
print("Destroying old test user...")
|
||||
self._destroy_test_user(cursor, parameters, verbosity)
|
||||
if verbosity >= 1:
|
||||
print "Creating test user..."
|
||||
print("Creating test user...")
|
||||
self._create_test_user(cursor, parameters, verbosity)
|
||||
except Exception as e:
|
||||
sys.stderr.write("Got an error recreating the test user: %s\n" % e)
|
||||
sys.exit(2)
|
||||
else:
|
||||
print "Tests cancelled."
|
||||
print("Tests cancelled.")
|
||||
sys.exit(1)
|
||||
|
||||
self.connection.settings_dict['SAVED_USER'] = self.connection.settings_dict['USER']
|
||||
|
@ -136,17 +136,17 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
time.sleep(1) # To avoid "database is being accessed by other users" errors.
|
||||
if self._test_user_create():
|
||||
if verbosity >= 1:
|
||||
print 'Destroying test user...'
|
||||
print('Destroying test user...')
|
||||
self._destroy_test_user(cursor, parameters, verbosity)
|
||||
if self._test_database_create():
|
||||
if verbosity >= 1:
|
||||
print 'Destroying test database tables...'
|
||||
print('Destroying test database tables...')
|
||||
self._execute_test_db_destruction(cursor, parameters, verbosity)
|
||||
self.connection.close()
|
||||
|
||||
def _execute_test_db_creation(self, cursor, parameters, verbosity):
|
||||
if verbosity >= 2:
|
||||
print "_create_test_db(): dbname = %s" % parameters['dbname']
|
||||
print("_create_test_db(): dbname = %s" % parameters['dbname'])
|
||||
statements = [
|
||||
"""CREATE TABLESPACE %(tblspace)s
|
||||
DATAFILE '%(tblspace)s.dbf' SIZE 20M
|
||||
|
@ -161,7 +161,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
|
||||
def _create_test_user(self, cursor, parameters, verbosity):
|
||||
if verbosity >= 2:
|
||||
print "_create_test_user(): username = %s" % parameters['user']
|
||||
print("_create_test_user(): username = %s" % parameters['user'])
|
||||
statements = [
|
||||
"""CREATE USER %(user)s
|
||||
IDENTIFIED BY %(password)s
|
||||
|
@ -174,7 +174,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
|
||||
def _execute_test_db_destruction(self, cursor, parameters, verbosity):
|
||||
if verbosity >= 2:
|
||||
print "_execute_test_db_destruction(): dbname=%s" % parameters['dbname']
|
||||
print("_execute_test_db_destruction(): dbname=%s" % parameters['dbname'])
|
||||
statements = [
|
||||
'DROP TABLESPACE %(tblspace)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS',
|
||||
'DROP TABLESPACE %(tblspace_temp)s INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS',
|
||||
|
@ -183,8 +183,8 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
|
||||
def _destroy_test_user(self, cursor, parameters, verbosity):
|
||||
if verbosity >= 2:
|
||||
print "_destroy_test_user(): user=%s" % parameters['user']
|
||||
print "Be patient. This can take some time..."
|
||||
print("_destroy_test_user(): user=%s" % parameters['user'])
|
||||
print("Be patient. This can take some time...")
|
||||
statements = [
|
||||
'DROP USER %(user)s CASCADE',
|
||||
]
|
||||
|
@ -194,7 +194,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
for template in statements:
|
||||
stmt = template % parameters
|
||||
if verbosity >= 2:
|
||||
print stmt
|
||||
print(stmt)
|
||||
try:
|
||||
cursor.execute(stmt)
|
||||
except Exception as err:
|
||||
|
|
|
@ -50,7 +50,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
if test_database_name != ':memory:':
|
||||
# Erase the old test database
|
||||
if verbosity >= 1:
|
||||
print "Destroying old test database '%s'..." % self.connection.alias
|
||||
print("Destroying old test database '%s'..." % self.connection.alias)
|
||||
if os.access(test_database_name, os.F_OK):
|
||||
if not autoclobber:
|
||||
confirm = raw_input("Type 'yes' if you would like to try deleting the test database '%s', or 'no' to cancel: " % test_database_name)
|
||||
|
@ -61,7 +61,7 @@ class DatabaseCreation(BaseDatabaseCreation):
|
|||
sys.stderr.write("Got an error deleting the old test database: %s\n" % e)
|
||||
sys.exit(2)
|
||||
else:
|
||||
print "Tests cancelled."
|
||||
print("Tests cancelled.")
|
||||
sys.exit(1)
|
||||
return test_database_name
|
||||
|
||||
|
|
|
@ -122,9 +122,9 @@ class BoundMethodWeakref(object):
|
|||
except Exception as e:
|
||||
try:
|
||||
traceback.print_exc()
|
||||
except AttributeError as err:
|
||||
print '''Exception during saferef %s cleanup function %s: %s'''%(
|
||||
self, function, e
|
||||
except AttributeError:
|
||||
print('Exception during saferef %s cleanup function %s: %s' % (
|
||||
self, function, e)
|
||||
)
|
||||
self.deletionMethods = [onDelete]
|
||||
self.key = self.calculateKey( target )
|
||||
|
|
|
@ -878,7 +878,7 @@ class DocTestFinder:
|
|||
add them to `tests`.
|
||||
"""
|
||||
if self._verbose:
|
||||
print 'Finding tests in %s' % name
|
||||
print('Finding tests in %s' % name)
|
||||
|
||||
# If we've already processed this object, then ignore it.
|
||||
if id(obj) in seen:
|
||||
|
@ -1034,7 +1034,7 @@ class DocTestRunner:
|
|||
>>> tests = DocTestFinder().find(_TestClass)
|
||||
>>> runner = DocTestRunner(verbose=False)
|
||||
>>> for test in tests:
|
||||
... print runner.run(test)
|
||||
... print(runner.run(test))
|
||||
(0, 2)
|
||||
(0, 1)
|
||||
(0, 2)
|
||||
|
@ -1406,28 +1406,28 @@ class DocTestRunner:
|
|||
failed.append(x)
|
||||
if verbose:
|
||||
if notests:
|
||||
print len(notests), "items had no tests:"
|
||||
print("%d items had no tests:" % len(notests))
|
||||
notests.sort()
|
||||
for thing in notests:
|
||||
print " ", thing
|
||||
print(" %s" % thing)
|
||||
if passed:
|
||||
print len(passed), "items passed all tests:"
|
||||
print("%d items passed all tests:" % len(passed))
|
||||
passed.sort()
|
||||
for thing, count in passed:
|
||||
print " %3d tests in %s" % (count, thing)
|
||||
print(" %3d tests in %s" % (count, thing))
|
||||
if failed:
|
||||
print self.DIVIDER
|
||||
print len(failed), "items had failures:"
|
||||
print(self.DIVIDER)
|
||||
print("%d items had failures:" % len(failed))
|
||||
failed.sort()
|
||||
for thing, (f, t) in failed:
|
||||
print " %3d of %3d in %s" % (f, t, thing)
|
||||
print(" %3d of %3d in %s" % (f, t, thing))
|
||||
if verbose:
|
||||
print totalt, "tests in", len(self._name2ft), "items."
|
||||
print totalt - totalf, "passed and", totalf, "failed."
|
||||
print("%d tests in % d items" % (len(self._name2ft), totalt))
|
||||
print("%d passed and %d failed." % (totalt - totalf, totalf))
|
||||
if totalf:
|
||||
print "***Test Failed***", totalf, "failures."
|
||||
print("***Test Failed*** %d failures." % totalf)
|
||||
elif verbose:
|
||||
print "Test passed."
|
||||
print("Test passed.")
|
||||
return totalf, totalt
|
||||
|
||||
#/////////////////////////////////////////////////////////////////
|
||||
|
@ -1437,8 +1437,8 @@ class DocTestRunner:
|
|||
d = self._name2ft
|
||||
for name, (f, t) in other._name2ft.items():
|
||||
if name in d:
|
||||
print "*** DocTestRunner.merge: '" + name + "' in both" \
|
||||
" testers; summing outcomes."
|
||||
print("*** DocTestRunner.merge: '" + name + "' in both" \
|
||||
" testers; summing outcomes.")
|
||||
f2, t2 = d[name]
|
||||
f = f + f2
|
||||
t = t + t2
|
||||
|
@ -2007,10 +2007,10 @@ class Tester:
|
|||
def runstring(self, s, name):
|
||||
test = DocTestParser().get_doctest(s, self.globs, name, None, None)
|
||||
if self.verbose:
|
||||
print "Running string", name
|
||||
print("Running string %s" % name)
|
||||
(f,t) = self.testrunner.run(test)
|
||||
if self.verbose:
|
||||
print f, "of", t, "examples failed in string", name
|
||||
print("%s of %s examples failed in string %s" % (f, t, name))
|
||||
return (f,t)
|
||||
|
||||
def rundoc(self, object, name=None, module=None):
|
||||
|
@ -2442,7 +2442,7 @@ def script_from_examples(s):
|
|||
... Ho hum
|
||||
... '''
|
||||
|
||||
>>> print script_from_examples(text)
|
||||
>>> print(script_from_examples(text))
|
||||
# Here are examples of simple math.
|
||||
#
|
||||
# Python has super accurate integer addition
|
||||
|
@ -2533,7 +2533,7 @@ def debug_script(src, pm=False, globs=None):
|
|||
try:
|
||||
execfile(srcfilename, globs, globs)
|
||||
except:
|
||||
print sys.exc_info()[1]
|
||||
print(sys.exc_info()[1])
|
||||
pdb.post_mortem(sys.exc_info()[2])
|
||||
else:
|
||||
# Note that %r is vital here. '%s' instead can, e.g., cause
|
||||
|
@ -2575,7 +2575,7 @@ class _TestClass:
|
|||
"""val -> _TestClass object with associated value val.
|
||||
|
||||
>>> t = _TestClass(123)
|
||||
>>> print t.get()
|
||||
>>> print(t.get())
|
||||
123
|
||||
"""
|
||||
|
||||
|
@ -2595,7 +2595,7 @@ class _TestClass:
|
|||
"""get() -> return TestClass's associated value.
|
||||
|
||||
>>> x = _TestClass(-42)
|
||||
>>> print x.get()
|
||||
>>> print(x.get())
|
||||
-42
|
||||
"""
|
||||
|
||||
|
@ -2627,7 +2627,7 @@ __test__ = {"_TestClass": _TestClass,
|
|||
|
||||
"blank lines": r"""
|
||||
Blank lines can be marked with <BLANKLINE>:
|
||||
>>> print 'foo\n\nbar\n'
|
||||
>>> print('foo\n\nbar\n')
|
||||
foo
|
||||
<BLANKLINE>
|
||||
bar
|
||||
|
@ -2637,14 +2637,14 @@ __test__ = {"_TestClass": _TestClass,
|
|||
"ellipsis": r"""
|
||||
If the ellipsis flag is used, then '...' can be used to
|
||||
elide substrings in the desired output:
|
||||
>>> print range(1000) #doctest: +ELLIPSIS
|
||||
>>> print(range(1000)) #doctest: +ELLIPSIS
|
||||
[0, 1, 2, ..., 999]
|
||||
""",
|
||||
|
||||
"whitespace normalization": r"""
|
||||
If the whitespace normalization flag is used, then
|
||||
differences in whitespace are ignored.
|
||||
>>> print range(30) #doctest: +NORMALIZE_WHITESPACE
|
||||
>>> print(range(30)) #doctest: +NORMALIZE_WHITESPACE
|
||||
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
|
||||
15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
|
||||
27, 28, 29]
|
||||
|
|
|
@ -6,7 +6,7 @@ Usage:
|
|||
>>> import datetime
|
||||
>>> d = datetime.datetime.now()
|
||||
>>> df = DateFormat(d)
|
||||
>>> print df.format('jS F Y H:i')
|
||||
>>> print(df.format('jS F Y H:i'))
|
||||
7th October 2003 11:39
|
||||
>>>
|
||||
"""
|
||||
|
|
|
@ -33,10 +33,10 @@ def colorize(text='', opts=(), **kwargs):
|
|||
colorize('hello', fg='red', bg='blue', opts=('blink',))
|
||||
colorize()
|
||||
colorize('goodbye', opts=('underscore',))
|
||||
print colorize('first line', fg='red', opts=('noreset',))
|
||||
print 'this should be red too'
|
||||
print colorize('and so should this')
|
||||
print 'this should not be red'
|
||||
print(colorize('first line', fg='red', opts=('noreset',)))
|
||||
print('this should be red too')
|
||||
print(colorize('and so should this'))
|
||||
print('this should not be red')
|
||||
"""
|
||||
code_list = []
|
||||
if text == '' and len(opts) == 1 and opts[0] == 'reset':
|
||||
|
@ -59,7 +59,7 @@ def make_style(opts=(), **kwargs):
|
|||
|
||||
Example:
|
||||
bold_red = make_style(opts=('bold',), fg='red')
|
||||
print bold_red('hello')
|
||||
print(bold_red('hello'))
|
||||
KEYWORD = make_style(fg='yellow')
|
||||
COMMENT = make_style(fg='blue', opts=('bold',))
|
||||
"""
|
||||
|
|
|
@ -99,7 +99,7 @@ class TestProgram(object):
|
|||
|
||||
def usageExit(self, msg=None):
|
||||
if msg:
|
||||
print msg
|
||||
print(msg)
|
||||
usage = {'progName': self.progName, 'catchbreak': '', 'failfast': '',
|
||||
'buffer': ''}
|
||||
if self.failfast != False:
|
||||
|
@ -108,7 +108,7 @@ class TestProgram(object):
|
|||
usage['catchbreak'] = CATCHBREAK
|
||||
if self.buffer != False:
|
||||
usage['buffer'] = BUFFEROUTPUT
|
||||
print self.USAGE % usage
|
||||
print(self.USAGE % usage)
|
||||
sys.exit(2)
|
||||
|
||||
def parseArgs(self, argv):
|
||||
|
|
|
@ -77,9 +77,9 @@ def main(argv=None):
|
|||
target_found, lines = has_target(fn)
|
||||
if not target_found:
|
||||
if testing:
|
||||
print '%s: %s' % (fn, lines[0]),
|
||||
print('%s: %s' % (fn, lines[0]))
|
||||
else:
|
||||
print "Adding xref to %s" % fn
|
||||
print("Adding xref to %s" % fn)
|
||||
process_file(fn, lines)
|
||||
else:
|
||||
print "Skipping %s: already has a xref" % fn
|
||||
|
|
|
@ -136,10 +136,10 @@ def colorize(text='', opts=(), **kwargs):
|
|||
colorize('hello', fg='red', bg='blue', opts=('blink',))
|
||||
colorize()
|
||||
colorize('goodbye', opts=('underscore',))
|
||||
print colorize('first line', fg='red', opts=('noreset',))
|
||||
print 'this should be red too'
|
||||
print colorize('and so should this')
|
||||
print 'this should not be red'
|
||||
print(colorize('first line', fg='red', opts=('noreset',)))
|
||||
print('this should be red too')
|
||||
print(colorize('and so should this'))
|
||||
print('this should not be red')
|
||||
"""
|
||||
color_names = ('black', 'red', 'green', 'yellow', 'blue', 'magenta', 'cyan', 'white')
|
||||
foreground = dict([(color_names[x], '3%s' % x) for x in range(8)])
|
||||
|
@ -168,4 +168,4 @@ if __name__ == '__main__':
|
|||
try:
|
||||
fixliterals(sys.argv[1])
|
||||
except (KeyboardInterrupt, SystemExit):
|
||||
print
|
||||
print('')
|
||||
|
|
|
@ -55,7 +55,7 @@ We'd like to be able to do things like this in our models (we assume the
|
|||
``hand`` attribute on the model is an instance of ``Hand``)::
|
||||
|
||||
example = MyModel.objects.get(pk=1)
|
||||
print example.hand.north
|
||||
print(example.hand.north)
|
||||
|
||||
new_hand = Hand(north, east, south, west)
|
||||
example.hand = new_hand
|
||||
|
|
|
@ -83,7 +83,7 @@ To verify that Django can be seen by Python, type ``python`` from your shell.
|
|||
Then at the Python prompt, try to import Django::
|
||||
|
||||
>>> import django
|
||||
>>> print django.get_version()
|
||||
>>> print(django.get_version())
|
||||
1.4
|
||||
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ transform procedure::
|
|||
>>> z = Zipcode(code=78212, poly=poly_3084)
|
||||
>>> z.save()
|
||||
>>> from django.db import connection
|
||||
>>> print connection.queries[-1]['sql'] # printing the last SQL statement executed (requires DEBUG=True)
|
||||
>>> print(connection.queries[-1]['sql']) # printing the last SQL statement executed (requires DEBUG=True)
|
||||
INSERT INTO "geoapp_zipcode" ("code", "poly") VALUES (78212, ST_Transform(ST_GeomFromWKB('\\001 ... ', 3084), 4326))
|
||||
|
||||
Thus, geometry parameters may be passed in using the ``GEOSGeometry`` object, WKT
|
||||
|
|
|
@ -114,7 +114,7 @@ __ http://www.gdal.org/ogr/ogr_formats.html
|
|||
information about each layer in a :class:`DataSource`::
|
||||
|
||||
>>> for layer in ds:
|
||||
... print 'Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name)
|
||||
... print('Layer "%s": %i %ss' % (layer.name, len(layer), layer.geom_type.name))
|
||||
...
|
||||
Layer "cities": 3 Points
|
||||
|
||||
|
@ -200,7 +200,7 @@ __ http://www.gdal.org/ogr/ogr_formats.html
|
|||
Property that returns the :class:`SpatialReference` associated
|
||||
with this layer::
|
||||
|
||||
>>> print layer.srs
|
||||
>>> print(layer.srs)
|
||||
GEOGCS["GCS_WGS_1984",
|
||||
DATUM["WGS_1984",
|
||||
SPHEROID["WGS_1984",6378137,298.257223563]],
|
||||
|
@ -220,9 +220,9 @@ __ http://www.gdal.org/ogr/ogr_formats.html
|
|||
other than ``None``, only features that intersect the filter will be
|
||||
returned when iterating over the layer::
|
||||
|
||||
>>> print layer.spatial_filter
|
||||
>>> print(layer.spatial_filter)
|
||||
None
|
||||
>>> print len(layer)
|
||||
>>> print(len(layer))
|
||||
3
|
||||
>>> [feat.get('Name') for feat in layer]
|
||||
['Pueblo', 'Lawrence', 'Houston']
|
||||
|
@ -814,7 +814,7 @@ systems and coordinate transformation::
|
|||
>>> gt1 = OGRGeomType(3) # Using an integer for the type
|
||||
>>> gt2 = OGRGeomType('Polygon') # Using a string
|
||||
>>> gt3 = OGRGeomType('POLYGON') # It's case-insensitive
|
||||
>>> print gt1 == 3, gt1 == 'Polygon' # Equivalence works w/non-OGRGeomType objects
|
||||
>>> print(gt1 == 3, gt1 == 'Polygon') # Equivalence works w/non-OGRGeomType objects
|
||||
True True
|
||||
|
||||
.. attribute:: name
|
||||
|
@ -927,19 +927,19 @@ Coordinate System Objects
|
|||
|
||||
>>> wkt = 'GEOGCS["WGS 84", DATUM["WGS_1984, ... AUTHORITY["EPSG","4326"]]')
|
||||
>>> srs = SpatialReference(wkt) # could also use 'WGS84', or 4326
|
||||
>>> print srs['GEOGCS']
|
||||
>>> print(srs['GEOGCS'])
|
||||
WGS 84
|
||||
>>> print srs['DATUM']
|
||||
>>> print(srs['DATUM'])
|
||||
WGS_1984
|
||||
>>> print srs['AUTHORITY']
|
||||
>>> print(srs['AUTHORITY'])
|
||||
EPSG
|
||||
>>> print srs['AUTHORITY', 1] # The authority value
|
||||
>>> print(srs['AUTHORITY', 1]) # The authority value
|
||||
4326
|
||||
>>> print srs['TOWGS84', 4] # the fourth value in this wkt
|
||||
>>> print(srs['TOWGS84', 4]) # the fourth value in this wkt
|
||||
0
|
||||
>>> print srs['UNIT|AUTHORITY'] # For the units authority, have to use the pipe symbol.
|
||||
>>> print(srs['UNIT|AUTHORITY']) # For the units authority, have to use the pipe symbol.
|
||||
EPSG
|
||||
>>> print srs['UNIT|AUTHORITY', 1] # The authority value for the units
|
||||
>>> print(srs['UNIT|AUTHORITY', 1]) # The authority value for the units
|
||||
9122
|
||||
|
||||
.. method:: attr_value(target, index=0)
|
||||
|
|
|
@ -714,7 +714,7 @@ the distance from the `Tasmanian`__ city of Hobart to every other
|
|||
:class:`PointField` in the ``AustraliaCity`` queryset is calculated::
|
||||
|
||||
>>> pnt = AustraliaCity.objects.get(name='Hobart').point
|
||||
>>> for city in AustraliaCity.objects.distance(pnt): print city.name, city.distance
|
||||
>>> for city in AustraliaCity.objects.distance(pnt): print(city.name, city.distance)
|
||||
Wollongong 990071.220408 m
|
||||
Shellharbour 972804.613941 m
|
||||
Thirroul 1002334.36351 m
|
||||
|
@ -874,9 +874,9 @@ Example::
|
|||
|
||||
>>> qs = Zipcode.objects.all().transform() # Transforms to WGS84
|
||||
>>> qs = Zipcode.objects.all().transform(32140) # Transforming to "NAD83 / Texas South Central"
|
||||
>>> print qs[0].poly.srid
|
||||
>>> print(qs[0].poly.srid)
|
||||
32140
|
||||
>>> print qs[0].poly
|
||||
>>> print(qs[0].poly)
|
||||
POLYGON ((234055.1698884720099159 4937796.9232223574072123 ...
|
||||
|
||||
``translate``
|
||||
|
@ -990,7 +990,7 @@ Attaches a ``gml`` attribute to every model in the queryset that contains the
|
|||
Example::
|
||||
|
||||
>>> qs = Zipcode.objects.all().gml()
|
||||
>>> print qs[0].gml
|
||||
>>> print(qs[0].gml)
|
||||
<gml:Polygon srsName="EPSG:4326"><gml:OuterBoundaryIs>-147.78711,70.245363 ... -147.78711,70.245363</gml:OuterBoundaryIs></gml:Polygon>
|
||||
|
||||
===================== =====================================================
|
||||
|
@ -1023,7 +1023,7 @@ necessary.
|
|||
Example::
|
||||
|
||||
>>> qs = Zipcode.objects.all().kml()
|
||||
>>> print qs[0].kml
|
||||
>>> print(qs[0].kml)
|
||||
<Polygon><outerBoundaryIs><LinearRing><coordinates>-103.04135,36.217596,0 ... -103.04135,36.217596,0</coordinates></LinearRing></outerBoundaryIs></Polygon>
|
||||
|
||||
===================== =====================================================
|
||||
|
@ -1128,7 +1128,7 @@ lower left coordinate and the upper right coordinate.
|
|||
Example::
|
||||
|
||||
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
|
||||
>>> print qs.extent()
|
||||
>>> print(qs.extent())
|
||||
(-96.8016128540039, 29.7633724212646, -95.3631439208984, 32.782058715820)
|
||||
|
||||
``extent3d``
|
||||
|
@ -1146,7 +1146,7 @@ the lower left coordinate and upper right coordinate.
|
|||
Example::
|
||||
|
||||
>>> qs = City.objects.filter(name__in=('Houston', 'Dallas'))
|
||||
>>> print qs.extent3d()
|
||||
>>> print(qs.extent3d())
|
||||
(-96.8016128540039, 29.7633724212646, 0, -95.3631439208984, 32.782058715820, 0)
|
||||
|
||||
``make_line``
|
||||
|
@ -1161,7 +1161,7 @@ Returns a ``LineString`` constructed from the point field geometries in the
|
|||
|
||||
Example::
|
||||
|
||||
>>> print City.objects.filter(name__in=('Houston', 'Dallas')).make_line()
|
||||
>>> print(City.objects.filter(name__in=('Houston', 'Dallas')).make_line())
|
||||
LINESTRING (-95.3631510000000020 29.7633739999999989, -96.8016109999999941 32.7820570000000018)
|
||||
|
||||
``unionagg``
|
||||
|
|
|
@ -231,7 +231,7 @@ Property that may be used to retrieve or set the SRID associated with the
|
|||
geometry. For example::
|
||||
|
||||
>>> pnt = Point(5, 23)
|
||||
>>> print pnt.srid
|
||||
>>> print(pnt.srid)
|
||||
None
|
||||
>>> pnt.srid = 4326
|
||||
>>> pnt.srid
|
||||
|
|
|
@ -39,13 +39,13 @@ Example
|
|||
>>> from django.contrib.gis.gdal import DataSource
|
||||
>>> ds = DataSource('test_poly.shp')
|
||||
>>> layer = ds[0]
|
||||
>>> print layer.fields # Exploring the fields in the layer, we only want the 'str' field.
|
||||
>>> print(layer.fields) # Exploring the fields in the layer, we only want the 'str' field.
|
||||
['float', 'int', 'str']
|
||||
>>> print len(layer) # getting the number of features in the layer (should be 3)
|
||||
>>> print(len(layer)) # getting the number of features in the layer (should be 3)
|
||||
3
|
||||
>>> print layer.geom_type # Should be 'Polygon'
|
||||
>>> print(layer.geom_type) # Should be 'Polygon'
|
||||
Polygon
|
||||
>>> print layer.srs # WGS84 in WKT
|
||||
>>> print(layer.srs) # WGS84 in WKT
|
||||
GEOGCS["GCS_WGS_1984",
|
||||
DATUM["WGS_1984",
|
||||
SPHEROID["WGS_1984",6378137,298.257223563]],
|
||||
|
|
|
@ -22,41 +22,41 @@ instantiated in units of kilometers (``km``) and miles (``mi``)::
|
|||
|
||||
>>> from django.contrib.gis.measure import Distance, D
|
||||
>>> d1 = Distance(km=5)
|
||||
>>> print d1
|
||||
>>> print(d1)
|
||||
5.0 km
|
||||
>>> d2 = D(mi=5) # `D` is an alias for `Distance`
|
||||
>>> print d2
|
||||
>>> print(d2)
|
||||
5.0 mi
|
||||
|
||||
Conversions are easy, just access the preferred unit attribute to get a
|
||||
converted distance quantity::
|
||||
|
||||
>>> print d1.mi # Converting 5 kilometers to miles
|
||||
>>> print(d1.mi) # Converting 5 kilometers to miles
|
||||
3.10685596119
|
||||
>>> print d2.km # Converting 5 miles to kilometers
|
||||
>>> print(d2.km) # Converting 5 miles to kilometers
|
||||
8.04672
|
||||
|
||||
Moreover, arithmetic operations may be performed between the distance
|
||||
objects::
|
||||
|
||||
>>> print d1 + d2 # Adding 5 miles to 5 kilometers
|
||||
>>> print(d1 + d2) # Adding 5 miles to 5 kilometers
|
||||
13.04672 km
|
||||
>>> print d2 - d1 # Subtracting 5 kilometers from 5 miles
|
||||
>>> print(d2 - d1) # Subtracting 5 kilometers from 5 miles
|
||||
1.89314403881 mi
|
||||
|
||||
Two :class:`Distance` objects multiplied together will yield an :class:`Area`
|
||||
object, which uses squared units of measure::
|
||||
|
||||
>>> a = d1 * d2 # Returns an Area object.
|
||||
>>> print a
|
||||
>>> print(a)
|
||||
40.2336 sq_km
|
||||
|
||||
To determine what the attribute abbreviation of a unit is, the ``unit_attname``
|
||||
class method may be used::
|
||||
|
||||
>>> print Distance.unit_attname('US Survey Foot')
|
||||
>>> print(Distance.unit_attname('US Survey Foot'))
|
||||
survey_ft
|
||||
>>> print Distance.unit_attname('centimeter')
|
||||
>>> print(Distance.unit_attname('centimeter'))
|
||||
cm
|
||||
|
||||
.. _supported_units:
|
||||
|
@ -127,7 +127,7 @@ Measurement API
|
|||
Returns the distance value in units corresponding to the given unit
|
||||
attribute. For example::
|
||||
|
||||
>>> print dist.km
|
||||
>>> print(dist.km)
|
||||
8.04672
|
||||
|
||||
.. classmethod:: unit_attname(unit_name)
|
||||
|
@ -159,7 +159,7 @@ Measurement API
|
|||
Returns the area value in units corresponding to the given unit
|
||||
attribute. For example::
|
||||
|
||||
>>> print a.sq_km
|
||||
>>> print(a.sq_km)
|
||||
12.949940551680001
|
||||
|
||||
.. classmethod:: unit_attname(unit_name)
|
||||
|
|
|
@ -362,24 +362,24 @@ Now, the world borders shapefile may be opened using GeoDjango's
|
|||
|
||||
>>> from django.contrib.gis.gdal import DataSource
|
||||
>>> ds = DataSource(world_shp)
|
||||
>>> print ds
|
||||
>>> print(ds)
|
||||
/ ... /geodjango/world/data/TM_WORLD_BORDERS-0.3.shp (ESRI Shapefile)
|
||||
|
||||
Data source objects can have different layers of geospatial features; however,
|
||||
shapefiles are only allowed to have one layer::
|
||||
|
||||
>>> print len(ds)
|
||||
>>> print(len(ds))
|
||||
1
|
||||
>>> lyr = ds[0]
|
||||
>>> print lyr
|
||||
>>> print(lyr)
|
||||
TM_WORLD_BORDERS-0.3
|
||||
|
||||
You can see what the geometry type of the layer is and how many features it
|
||||
contains::
|
||||
|
||||
>>> print lyr.geom_type
|
||||
>>> print(lyr.geom_type)
|
||||
Polygon
|
||||
>>> print len(lyr)
|
||||
>>> print(len(lyr))
|
||||
246
|
||||
|
||||
.. note::
|
||||
|
@ -397,7 +397,7 @@ system associated with it -- if it does, the ``srs`` attribute will return a
|
|||
:class:`~django.contrib.gis.gdal.SpatialReference` object::
|
||||
|
||||
>>> srs = lyr.srs
|
||||
>>> print srs
|
||||
>>> print(srs)
|
||||
GEOGCS["GCS_WGS_1984",
|
||||
DATUM["WGS_1984",
|
||||
SPHEROID["WGS_1984",6378137.0,298.257223563]],
|
||||
|
@ -413,7 +413,7 @@ latitude.
|
|||
In addition, shapefiles also support attribute fields that may contain
|
||||
additional data. Here are the fields on the World Borders layer:
|
||||
|
||||
>>> print lyr.fields
|
||||
>>> print(lyr.fields)
|
||||
['FIPS', 'ISO2', 'ISO3', 'UN', 'NAME', 'AREA', 'POP2005', 'REGION', 'SUBREGION', 'LON', 'LAT']
|
||||
|
||||
Here we are examining the OGR types (e.g., whether a field is an integer or
|
||||
|
@ -428,7 +428,7 @@ feature's attribute fields (whose **values** are accessed via ``get()``
|
|||
method)::
|
||||
|
||||
>>> for feat in lyr:
|
||||
... print feat.get('NAME'), feat.geom.num_points
|
||||
... print(feat.get('NAME'), feat.geom.num_points)
|
||||
...
|
||||
Guernsey 18
|
||||
Jersey 26
|
||||
|
@ -443,16 +443,16 @@ method)::
|
|||
And individual features may be retrieved by their feature ID::
|
||||
|
||||
>>> feat = lyr[234]
|
||||
>>> print feat.get('NAME')
|
||||
>>> print(feat.get('NAME'))
|
||||
San Marino
|
||||
|
||||
Here the boundary geometry for San Marino is extracted and looking
|
||||
exported to WKT and GeoJSON::
|
||||
|
||||
>>> geom = feat.geom
|
||||
>>> print geom.wkt
|
||||
>>> print(geom.wkt)
|
||||
POLYGON ((12.415798 43.957954,12.450554 ...
|
||||
>>> print geom.json
|
||||
>>> print(geom.json)
|
||||
{ "type": "Polygon", "coordinates": [ [ [ 12.415798, 43.957954 ], [ 12.450554, 43.979721 ], ...
|
||||
|
||||
|
||||
|
@ -659,7 +659,7 @@ in transformation SQL, allowing the developer to work at a higher level
|
|||
of abstraction::
|
||||
|
||||
>>> qs = WorldBorder.objects.filter(mpoly__intersects=pnt)
|
||||
>>> print qs.query # Generating the SQL
|
||||
>>> print(qs.query) # Generating the SQL
|
||||
SELECT "world_worldborder"."id", "world_worldborder"."name", "world_worldborder"."area",
|
||||
"world_worldborder"."pop2005", "world_worldborder"."fips", "world_worldborder"."iso2",
|
||||
"world_worldborder"."iso3", "world_worldborder"."un", "world_worldborder"."region",
|
||||
|
|
|
@ -891,7 +891,7 @@ For example, to create an Atom 1.0 feed and print it to standard output::
|
|||
... link=u"http://www.example.com/entries/1/",
|
||||
... pubdate=datetime.now(),
|
||||
... description=u"<p>Today I had a Vienna Beef hot dog. It was pink, plump and perfect.</p>")
|
||||
>>> print f.writeString('UTF-8')
|
||||
>>> print(f.writeString('UTF-8'))
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
|
||||
...
|
||||
|
|
|
@ -161,7 +161,7 @@ and the latter gets precedence::
|
|||
... url = forms.URLField()
|
||||
... comment = forms.CharField()
|
||||
>>> f = CommentForm(initial={'name': 'instance'}, auto_id=False)
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th>Name:</th><td><input type="text" name="name" value="instance" /></td></tr>
|
||||
<tr><th>Url:</th><td><input type="text" name="url" /></td></tr>
|
||||
<tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
|
||||
|
@ -266,7 +266,7 @@ The second task of a ``Form`` object is to render itself as HTML. To do so,
|
|||
simply ``print`` it::
|
||||
|
||||
>>> f = ContactForm()
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
|
||||
<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
|
||||
|
@ -283,7 +283,7 @@ include ``checked="checked"`` if appropriate::
|
|||
... 'sender': 'foo@example.com',
|
||||
... 'cc_myself': True}
|
||||
>>> f = ContactForm(data)
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" value="hello" /></td></tr>
|
||||
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" value="Hi there" /></td></tr>
|
||||
<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" value="foo@example.com" /></td></tr>
|
||||
|
@ -331,7 +331,7 @@ a form object, and each rendering method returns a Unicode object.
|
|||
>>> f = ContactForm()
|
||||
>>> f.as_p()
|
||||
u'<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>\n<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>\n<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>\n<p><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></p>'
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></p>
|
||||
<p><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></p>
|
||||
<p><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></p>
|
||||
|
@ -350,7 +350,7 @@ a form object, and each rendering method returns a Unicode object.
|
|||
>>> f = ContactForm()
|
||||
>>> f.as_ul()
|
||||
u'<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>\n<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>\n<li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>\n<li><label for="id_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_cc_myself" /></li>'
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><label for="id_subject">Subject:</label> <input id="id_subject" type="text" name="subject" maxlength="100" /></li>
|
||||
<li><label for="id_message">Message:</label> <input type="text" name="message" id="id_message" /></li>
|
||||
<li><label for="id_sender">Sender:</label> <input type="text" name="sender" id="id_sender" /></li>
|
||||
|
@ -368,7 +368,7 @@ a form object, and each rendering method returns a Unicode object.
|
|||
>>> f = ContactForm()
|
||||
>>> f.as_table()
|
||||
u'<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>\n<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>\n<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>\n<tr><th><label for="id_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_cc_myself" /></td></tr>'
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th><label for="id_subject">Subject:</label></th><td><input id="id_subject" type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th><label for="id_message">Message:</label></th><td><input type="text" name="message" id="id_message" /></td></tr>
|
||||
<tr><th><label for="id_sender">Sender:</label></th><td><input type="text" name="sender" id="id_sender" /></td></tr>
|
||||
|
@ -398,7 +398,7 @@ Once you've done that, rows will be given ``"error"`` and/or ``"required"``
|
|||
classes, as needed. The HTML will look something like::
|
||||
|
||||
>>> f = ContactForm(data)
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr class="required"><th><label for="id_subject">Subject:</label> ...
|
||||
<tr class="required"><th><label for="id_message">Message:</label> ...
|
||||
<tr class="required error"><th><label for="id_sender">Sender:</label> ...
|
||||
|
@ -426,17 +426,17 @@ If ``auto_id`` is ``False``, then the form output will not include ``<label>``
|
|||
tags nor ``id`` attributes::
|
||||
|
||||
>>> f = ContactForm(auto_id=False)
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
|
||||
<tr><th>Sender:</th><td><input type="text" name="sender" /></td></tr>
|
||||
<tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li>Subject: <input type="text" name="subject" maxlength="100" /></li>
|
||||
<li>Message: <input type="text" name="message" /></li>
|
||||
<li>Sender: <input type="text" name="sender" /></li>
|
||||
<li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p>Subject: <input type="text" name="subject" maxlength="100" /></p>
|
||||
<p>Message: <input type="text" name="message" /></p>
|
||||
<p>Sender: <input type="text" name="sender" /></p>
|
||||
|
@ -447,17 +447,17 @@ If ``auto_id`` is set to ``True``, then the form output *will* include
|
|||
field::
|
||||
|
||||
>>> f = ContactForm(auto_id=True)
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th><label for="subject">Subject:</label></th><td><input id="subject" type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th><label for="message">Message:</label></th><td><input type="text" name="message" id="message" /></td></tr>
|
||||
<tr><th><label for="sender">Sender:</label></th><td><input type="text" name="sender" id="sender" /></td></tr>
|
||||
<tr><th><label for="cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="cc_myself" /></td></tr>
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></li>
|
||||
<li><label for="message">Message:</label> <input type="text" name="message" id="message" /></li>
|
||||
<li><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></li>
|
||||
<li><label for="cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="cc_myself" /></li>
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p><label for="subject">Subject:</label> <input id="subject" type="text" name="subject" maxlength="100" /></p>
|
||||
<p><label for="message">Message:</label> <input type="text" name="message" id="message" /></p>
|
||||
<p><label for="sender">Sender:</label> <input type="text" name="sender" id="sender" /></p>
|
||||
|
@ -470,17 +470,17 @@ attributes based on the format string. For example, for a format string
|
|||
``'field_subject'``. Continuing our example::
|
||||
|
||||
>>> f = ContactForm(auto_id='id_for_%s')
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th><label for="id_for_subject">Subject:</label></th><td><input id="id_for_subject" type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th><label for="id_for_message">Message:</label></th><td><input type="text" name="message" id="id_for_message" /></td></tr>
|
||||
<tr><th><label for="id_for_sender">Sender:</label></th><td><input type="text" name="sender" id="id_for_sender" /></td></tr>
|
||||
<tr><th><label for="id_for_cc_myself">Cc myself:</label></th><td><input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></td></tr>
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
|
||||
<li><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></li>
|
||||
<li><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></li>
|
||||
<li><label for="id_for_cc_myself">Cc myself:</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p><label for="id_for_subject">Subject:</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></p>
|
||||
<p><label for="id_for_message">Message:</label> <input type="text" name="message" id="id_for_message" /></p>
|
||||
<p><label for="id_for_sender">Sender:</label> <input type="text" name="sender" id="id_for_sender" /></p>
|
||||
|
@ -496,13 +496,13 @@ rendered. It's possible to change the colon to another character, or omit it
|
|||
entirely, using the ``label_suffix`` parameter::
|
||||
|
||||
>>> f = ContactForm(auto_id='id_for_%s', label_suffix='')
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><label for="id_for_subject">Subject</label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
|
||||
<li><label for="id_for_message">Message</label> <input type="text" name="message" id="id_for_message" /></li>
|
||||
<li><label for="id_for_sender">Sender</label> <input type="text" name="sender" id="id_for_sender" /></li>
|
||||
<li><label for="id_for_cc_myself">Cc myself</label> <input type="checkbox" name="cc_myself" id="id_for_cc_myself" /></li>
|
||||
>>> f = ContactForm(auto_id='id_for_%s', label_suffix=' ->')
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><label for="id_for_subject">Subject -></label> <input id="id_for_subject" type="text" name="subject" maxlength="100" /></li>
|
||||
<li><label for="id_for_message">Message -></label> <input type="text" name="message" id="id_for_message" /></li>
|
||||
<li><label for="id_for_sender">Sender -></label> <input type="text" name="sender" id="id_for_sender" /></li>
|
||||
|
@ -534,17 +534,17 @@ method you're using::
|
|||
... 'sender': 'invalid email address',
|
||||
... 'cc_myself': True}
|
||||
>>> f = ContactForm(data, auto_id=False)
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th>Subject:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="subject" maxlength="100" /></td></tr>
|
||||
<tr><th>Message:</th><td><input type="text" name="message" value="Hi there" /></td></tr>
|
||||
<tr><th>Sender:</th><td><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul><input type="text" name="sender" value="invalid email address" /></td></tr>
|
||||
<tr><th>Cc myself:</th><td><input checked="checked" type="checkbox" name="cc_myself" /></td></tr>
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li><ul class="errorlist"><li>This field is required.</li></ul>Subject: <input type="text" name="subject" maxlength="100" /></li>
|
||||
<li>Message: <input type="text" name="message" value="Hi there" /></li>
|
||||
<li><ul class="errorlist"><li>Enter a valid e-mail address.</li></ul>Sender: <input type="text" name="sender" value="invalid email address" /></li>
|
||||
<li>Cc myself: <input checked="checked" type="checkbox" name="cc_myself" /></li>
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p><ul class="errorlist"><li>This field is required.</li></ul></p>
|
||||
<p>Subject: <input type="text" name="subject" maxlength="100" /></p>
|
||||
<p>Message: <input type="text" name="message" value="Hi there" /></p>
|
||||
|
@ -593,13 +593,13 @@ To retrieve a single ``BoundField``, use dictionary lookup syntax on your form
|
|||
using the field's name as the key::
|
||||
|
||||
>>> form = ContactForm()
|
||||
>>> print form['subject']
|
||||
>>> print(form['subject'])
|
||||
<input id="id_subject" type="text" name="subject" maxlength="100" />
|
||||
|
||||
To retrieve all ``BoundField`` objects, iterate the form::
|
||||
|
||||
>>> form = ContactForm()
|
||||
>>> for boundfield in form: print boundfield
|
||||
>>> for boundfield in form: print(boundfield)
|
||||
<input id="id_subject" type="text" name="subject" maxlength="100" />
|
||||
<input type="text" name="message" id="id_message" />
|
||||
<input type="text" name="sender" id="id_sender" />
|
||||
|
@ -608,10 +608,10 @@ To retrieve all ``BoundField`` objects, iterate the form::
|
|||
The field-specific output honors the form object's ``auto_id`` setting::
|
||||
|
||||
>>> f = ContactForm(auto_id=False)
|
||||
>>> print f['message']
|
||||
>>> print(f['message'])
|
||||
<input type="text" name="message" />
|
||||
>>> f = ContactForm(auto_id='id_%s')
|
||||
>>> print f['message']
|
||||
>>> print(f['message'])
|
||||
<input type="text" name="message" id="id_message" />
|
||||
|
||||
For a field's list of errors, access the field's ``errors`` attribute.
|
||||
|
@ -623,15 +623,15 @@ For a field's list of errors, access the field's ``errors`` attribute.
|
|||
|
||||
>>> data = {'subject': 'hi', 'message': '', 'sender': '', 'cc_myself': ''}
|
||||
>>> f = ContactForm(data, auto_id=False)
|
||||
>>> print f['message']
|
||||
>>> print(f['message'])
|
||||
<input type="text" name="message" />
|
||||
>>> f['message'].errors
|
||||
[u'This field is required.']
|
||||
>>> print f['message'].errors
|
||||
>>> print(f['message'].errors)
|
||||
<ul class="errorlist"><li>This field is required.</li></ul>
|
||||
>>> f['subject'].errors
|
||||
[]
|
||||
>>> print f['subject'].errors
|
||||
>>> print(f['subject'].errors)
|
||||
|
||||
>>> str(f['subject'].errors)
|
||||
''
|
||||
|
@ -667,9 +667,9 @@ by a ``Widget``::
|
|||
>>> initial = {'subject': 'welcome'}
|
||||
>>> unbound_form = ContactForm(initial=initial)
|
||||
>>> bound_form = ContactForm(data, initial=initial)
|
||||
>>> print unbound_form['subject'].value()
|
||||
>>> print(unbound_form['subject'].value())
|
||||
welcome
|
||||
>>> print bound_form['subject'].value()
|
||||
>>> print(bound_form['subject'].value())
|
||||
hi
|
||||
|
||||
.. _binding-uploaded-files:
|
||||
|
@ -753,7 +753,7 @@ fields are ordered first::
|
|||
>>> class ContactFormWithPriority(ContactForm):
|
||||
... priority = forms.CharField()
|
||||
>>> f = ContactFormWithPriority(auto_id=False)
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul())
|
||||
<li>Subject: <input type="text" name="subject" maxlength="100" /></li>
|
||||
<li>Message: <input type="text" name="message" /></li>
|
||||
<li>Sender: <input type="text" name="sender" /></li>
|
||||
|
@ -773,7 +773,7 @@ classes::
|
|||
>>> class BeatleForm(PersonForm, InstrumentForm):
|
||||
... haircut_type = CharField()
|
||||
>>> b = BeatleForm(auto_id=False)
|
||||
>>> print b.as_ul()
|
||||
>>> print(b.as_ul())
|
||||
<li>First name: <input type="text" name="first_name" /></li>
|
||||
<li>Last name: <input type="text" name="last_name" /></li>
|
||||
<li>Instrument: <input type="text" name="instrument" /></li>
|
||||
|
@ -791,9 +791,9 @@ You can put several Django forms inside one ``<form>`` tag. To give each
|
|||
|
||||
>>> mother = PersonForm(prefix="mother")
|
||||
>>> father = PersonForm(prefix="father")
|
||||
>>> print mother.as_ul()
|
||||
>>> print(mother.as_ul())
|
||||
<li><label for="id_mother-first_name">First name:</label> <input type="text" name="mother-first_name" id="id_mother-first_name" /></li>
|
||||
<li><label for="id_mother-last_name">Last name:</label> <input type="text" name="mother-last_name" id="id_mother-last_name" /></li>
|
||||
>>> print father.as_ul()
|
||||
>>> print(father.as_ul())
|
||||
<li><label for="id_father-first_name">First name:</label> <input type="text" name="father-first_name" id="id_father-first_name" /></li>
|
||||
<li><label for="id_father-last_name">Last name:</label> <input type="text" name="father-last_name" id="id_father-last_name" /></li>
|
||||
|
|
|
@ -112,7 +112,7 @@ We've specified ``auto_id=False`` to simplify the output::
|
|||
... url = forms.URLField(label='Your Web site', required=False)
|
||||
... comment = forms.CharField()
|
||||
>>> f = CommentForm(auto_id=False)
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th>Your name:</th><td><input type="text" name="name" /></td></tr>
|
||||
<tr><th>Your Web site:</th><td><input type="text" name="url" /></td></tr>
|
||||
<tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
|
||||
|
@ -135,7 +135,7 @@ field is initialized to a particular value. For example::
|
|||
... url = forms.URLField(initial='http://')
|
||||
... comment = forms.CharField()
|
||||
>>> f = CommentForm(auto_id=False)
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
|
||||
<tr><th>Url:</th><td><input type="text" name="url" value="http://" /></td></tr>
|
||||
<tr><th>Comment:</th><td><input type="text" name="comment" /></td></tr>
|
||||
|
@ -150,7 +150,7 @@ and the HTML output will include any validation errors::
|
|||
... comment = forms.CharField()
|
||||
>>> default_data = {'name': 'Your name', 'url': 'http://'}
|
||||
>>> f = CommentForm(default_data, auto_id=False)
|
||||
>>> print f
|
||||
>>> print(f)
|
||||
<tr><th>Name:</th><td><input type="text" name="name" value="Your name" /></td></tr>
|
||||
<tr><th>Url:</th><td><ul class="errorlist"><li>Enter a valid URL.</li></ul><input type="text" name="url" value="http://" /></td></tr>
|
||||
<tr><th>Comment:</th><td><ul class="errorlist"><li>This field is required.</li></ul><input type="text" name="comment" /></td></tr>
|
||||
|
@ -179,7 +179,7 @@ Instead of a constant, you can also pass any callable::
|
|||
>>> import datetime
|
||||
>>> class DateForm(forms.Form):
|
||||
... day = forms.DateField(initial=datetime.date.today)
|
||||
>>> print DateForm()
|
||||
>>> print(DateForm())
|
||||
<tr><th>Day:</th><td><input type="text" name="day" value="12/23/2008" /><td></tr>
|
||||
|
||||
The callable will be evaluated only when the unbound form is displayed, not when it is defined.
|
||||
|
@ -211,17 +211,17 @@ fields. We've specified ``auto_id=False`` to simplify the output::
|
|||
... sender = forms.EmailField(help_text='A valid email address, please.')
|
||||
... cc_myself = forms.BooleanField(required=False)
|
||||
>>> f = HelpTextContactForm(auto_id=False)
|
||||
>>> print f.as_table()
|
||||
>>> print(f.as_table())
|
||||
<tr><th>Subject:</th><td><input type="text" name="subject" maxlength="100" /><br /><span class="helptext">100 characters max.</span></td></tr>
|
||||
<tr><th>Message:</th><td><input type="text" name="message" /></td></tr>
|
||||
<tr><th>Sender:</th><td><input type="text" name="sender" /><br />A valid email address, please.</td></tr>
|
||||
<tr><th>Cc myself:</th><td><input type="checkbox" name="cc_myself" /></td></tr>
|
||||
>>> print f.as_ul()
|
||||
>>> print(f.as_ul()))
|
||||
<li>Subject: <input type="text" name="subject" maxlength="100" /> <span class="helptext">100 characters max.</span></li>
|
||||
<li>Message: <input type="text" name="message" /></li>
|
||||
<li>Sender: <input type="text" name="sender" /> A valid email address, please.</li>
|
||||
<li>Cc myself: <input type="checkbox" name="cc_myself" /></li>
|
||||
>>> print f.as_p()
|
||||
>>> print(f.as_p())
|
||||
<p>Subject: <input type="text" name="subject" maxlength="100" /> <span class="helptext">100 characters max.</span></p>
|
||||
<p>Message: <input type="text" name="message" /></p>
|
||||
<p>Sender: <input type="text" name="sender" /> A valid email address, please.</p>
|
||||
|
|
|
@ -327,7 +327,7 @@ Once the object has been saved, you must reload the object in order to access
|
|||
the actual value that was applied to the updated field::
|
||||
|
||||
>>> product = Products.objects.get(pk=product.pk)
|
||||
>>> print product.number_sold
|
||||
>>> print(product.number_sold)
|
||||
42
|
||||
|
||||
For more details, see the documentation on :ref:`F() expressions
|
||||
|
|
|
@ -29,7 +29,7 @@ You can evaluate a ``QuerySet`` in the following ways:
|
|||
the headline of all entries in the database::
|
||||
|
||||
for e in Entry.objects.all():
|
||||
print e.headline
|
||||
print(e.headline)
|
||||
|
||||
* **Slicing.** As explained in :ref:`limiting-querysets`, a ``QuerySet`` can
|
||||
be sliced, using Python's array-slicing syntax. Slicing an unevaluated
|
||||
|
@ -71,7 +71,7 @@ You can evaluate a ``QuerySet`` in the following ways:
|
|||
``True``, otherwise ``False``. For example::
|
||||
|
||||
if Entry.objects.filter(headline="Test"):
|
||||
print "There is at least one Entry with the headline Test"
|
||||
print("There is at least one Entry with the headline Test")
|
||||
|
||||
Note: *Don't* use this if all you want to do is determine if at least one
|
||||
result exists, and don't need the actual objects. It's more efficient to
|
||||
|
@ -1251,7 +1251,7 @@ The :exc:`~django.core.exceptions.DoesNotExist` exception inherits from
|
|||
e = Entry.objects.get(id=3)
|
||||
b = Blog.objects.get(id=1)
|
||||
except ObjectDoesNotExist:
|
||||
print "Either the entry or blog doesn't exist."
|
||||
print("Either the entry or blog doesn't exist.")
|
||||
|
||||
create
|
||||
~~~~~~
|
||||
|
|
|
@ -215,18 +215,18 @@ the content of the response manually::
|
|||
# Set up a rendered TemplateResponse
|
||||
>>> t = TemplateResponse(request, 'original.html', {})
|
||||
>>> t.render()
|
||||
>>> print t.content
|
||||
>>> print(t.content)
|
||||
Original content
|
||||
|
||||
# Re-rendering doesn't change content
|
||||
>>> t.template_name = 'new.html'
|
||||
>>> t.render()
|
||||
>>> print t.content
|
||||
>>> print(t.content)
|
||||
Original content
|
||||
|
||||
# Assigning content does change, no render() call required
|
||||
>>> t.content = t.rendered_content
|
||||
>>> print t.content
|
||||
>>> print(t.content)
|
||||
New content
|
||||
|
||||
Post-render callbacks
|
||||
|
|
|
@ -69,7 +69,7 @@ takes one argument -- the raw template code::
|
|||
|
||||
>>> from django.template import Template
|
||||
>>> t = Template("My name is {{ my_name }}.")
|
||||
>>> print t
|
||||
>>> print(t)
|
||||
<django.template.Template instance>
|
||||
|
||||
.. admonition:: Behind the scenes
|
||||
|
|
|
@ -714,11 +714,11 @@ Django provides two functions in :mod:`django.contrib.auth`:
|
|||
user = authenticate(username='john', password='secret')
|
||||
if user is not None:
|
||||
if user.is_active:
|
||||
print "You provided a correct username and password!"
|
||||
print("You provided a correct username and password!")
|
||||
else:
|
||||
print "Your account has been disabled!"
|
||||
print("Your account has been disabled!")
|
||||
else:
|
||||
print "Your username and password were incorrect."
|
||||
print("Your username and password were incorrect.")
|
||||
|
||||
.. function:: login()
|
||||
|
||||
|
|
|
@ -263,14 +263,14 @@ Bulk delete some Publications - references to deleted publications should go::
|
|||
Bulk delete some articles - references to deleted objects should go::
|
||||
|
||||
>>> q = Article.objects.filter(headline__startswith='Django')
|
||||
>>> print q
|
||||
>>> print(q)
|
||||
[<Article: Django lets you build Web apps easily>]
|
||||
>>> q.delete()
|
||||
|
||||
After the delete, the QuerySet cache needs to be cleared, and the referenced
|
||||
objects should be gone::
|
||||
|
||||
>>> print q
|
||||
>>> print(q)
|
||||
[]
|
||||
>>> p1.article_set.all()
|
||||
[<Article: NASA uses Python>]
|
||||
|
|
|
@ -284,10 +284,10 @@ actually run the query until the :class:`~django.db.models.query.QuerySet` is
|
|||
>>> q = Entry.objects.filter(headline__startswith="What")
|
||||
>>> q = q.filter(pub_date__lte=datetime.now())
|
||||
>>> q = q.exclude(body_text__icontains="food")
|
||||
>>> print q
|
||||
>>> print(q)
|
||||
|
||||
Though this looks like three database hits, in fact it hits the database only
|
||||
once, at the last line (``print q``). In general, the results of a
|
||||
once, at the last line (``print(q)``). In general, the results of a
|
||||
:class:`~django.db.models.query.QuerySet` aren't fetched from the database
|
||||
until you "ask" for them. When you do, the
|
||||
:class:`~django.db.models.query.QuerySet` is *evaluated* by accessing the
|
||||
|
@ -720,8 +720,8 @@ your :class:`~django.db.models.query.QuerySet`\s correctly. For example, the
|
|||
following will create two :class:`~django.db.models.query.QuerySet`\s, evaluate
|
||||
them, and throw them away::
|
||||
|
||||
>>> print [e.headline for e in Entry.objects.all()]
|
||||
>>> print [e.pub_date for e in Entry.objects.all()]
|
||||
>>> print([e.headline for e in Entry.objects.all()])
|
||||
>>> print([e.pub_date for e in Entry.objects.all()])
|
||||
|
||||
That means the same database query will be executed twice, effectively doubling
|
||||
your database load. Also, there's a possibility the two lists may not include
|
||||
|
@ -732,8 +732,8 @@ To avoid this problem, simply save the
|
|||
:class:`~django.db.models.query.QuerySet` and reuse it::
|
||||
|
||||
>>> queryset = Entry.objects.all()
|
||||
>>> print [p.headline for p in queryset] # Evaluate the query set.
|
||||
>>> print [p.pub_date for p in queryset] # Re-use the cache from the evaluation.
|
||||
>>> print([p.headline for p in queryset]) # Evaluate the query set.
|
||||
>>> print([p.pub_date for p in queryset]) # Re-use the cache from the evaluation.
|
||||
|
||||
.. _complex-lookups-with-q:
|
||||
|
||||
|
@ -1055,16 +1055,16 @@ related object is accessed. Subsequent accesses to the foreign key on the same
|
|||
object instance are cached. Example::
|
||||
|
||||
>>> e = Entry.objects.get(id=2)
|
||||
>>> print e.blog # Hits the database to retrieve the associated Blog.
|
||||
>>> print e.blog # Doesn't hit the database; uses cached version.
|
||||
>>> print(e.blog) # Hits the database to retrieve the associated Blog.
|
||||
>>> print(e.blog) # Doesn't hit the database; uses cached version.
|
||||
|
||||
Note that the :meth:`~django.db.models.query.QuerySet.select_related`
|
||||
:class:`~django.db.models.query.QuerySet` method recursively prepopulates the
|
||||
cache of all one-to-many relationships ahead of time. Example::
|
||||
|
||||
>>> e = Entry.objects.select_related().get(id=2)
|
||||
>>> print e.blog # Doesn't hit the database; uses cached version.
|
||||
>>> print e.blog # Doesn't hit the database; uses cached version.
|
||||
>>> print(e.blog) # Doesn't hit the database; uses cached version.
|
||||
>>> print(e.blog) # Doesn't hit the database; uses cached version.
|
||||
|
||||
.. _backwards-related-objects:
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ This is best illustrated with an example. Suppose you've got the following model
|
|||
You could then execute custom SQL like so::
|
||||
|
||||
>>> for p in Person.objects.raw('SELECT * FROM myapp_person'):
|
||||
... print p
|
||||
... print(p)
|
||||
John Smith
|
||||
Jane Jones
|
||||
|
||||
|
@ -128,8 +128,8 @@ The ``Person`` objects returned by this query will be deferred model instances
|
|||
fields that are omitted from the query will be loaded on demand. For example::
|
||||
|
||||
>>> for p in Person.objects.raw('SELECT id, first_name FROM myapp_person'):
|
||||
... print p.first_name, # This will be retrieved by the original query
|
||||
... print p.last_name # This will be retrieved on demand
|
||||
... print(p.first_name, # This will be retrieved by the original query
|
||||
... p.last_name) # This will be retrieved on demand
|
||||
...
|
||||
John Smith
|
||||
Jane Jones
|
||||
|
@ -153,7 +153,7 @@ of people with their ages calculated by the database::
|
|||
|
||||
>>> people = Person.objects.raw('SELECT *, age(birth_date) AS age FROM myapp_person')
|
||||
>>> for p in people:
|
||||
... print "%s is %s." % (p.first_name, p.age)
|
||||
... print("%s is %s." % (p.first_name, p.age))
|
||||
John is 37.
|
||||
Jane is 42.
|
||||
...
|
||||
|
|
|
@ -24,7 +24,7 @@ would with a regular form::
|
|||
|
||||
>>> formset = ArticleFormSet()
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
|
||||
|
||||
|
@ -42,7 +42,7 @@ the formset you iterated over the ``forms`` attribute::
|
|||
|
||||
>>> formset = ArticleFormSet()
|
||||
>>> for form in formset.forms:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
|
||||
Iterating over ``formset.forms`` will render the forms in the order
|
||||
they were created. The default formset iterator also renders the forms
|
||||
|
@ -71,7 +71,7 @@ example::
|
|||
... ])
|
||||
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Django is now open source" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-12" id="id_form-0-pub_date" /></td></tr>
|
||||
<tr><th><label for="id_form-1-title">Title:</label></th><td><input type="text" name="form-1-title" id="id_form-1-title" /></td></tr>
|
||||
|
@ -98,7 +98,7 @@ limit the maximum number of empty forms the formset will display::
|
|||
>>> ArticleFormSet = formset_factory(ArticleForm, extra=2, max_num=1)
|
||||
>>> formset = ArticleFormset()
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
|
||||
|
||||
|
@ -283,7 +283,7 @@ Lets you create a formset with the ability to order::
|
|||
... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
|
||||
... ])
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr>
|
||||
<tr><th><label for="id_form-0-ORDER">Order:</label></th><td><input type="text" name="form-0-ORDER" value="1" id="id_form-0-ORDER" /></td></tr>
|
||||
|
@ -321,7 +321,7 @@ happen when the user changes these values::
|
|||
>>> formset.is_valid()
|
||||
True
|
||||
>>> for form in formset.ordered_forms:
|
||||
... print form.cleaned_data
|
||||
... print(form.cleaned_data)
|
||||
{'pub_date': datetime.date(2008, 5, 1), 'ORDER': 0, 'title': u'Article #3'}
|
||||
{'pub_date': datetime.date(2008, 5, 11), 'ORDER': 1, 'title': u'Article #2'}
|
||||
{'pub_date': datetime.date(2008, 5, 10), 'ORDER': 2, 'title': u'Article #1'}
|
||||
|
@ -339,7 +339,7 @@ Lets you create a formset with the ability to delete::
|
|||
... {'title': u'Article #2', 'pub_date': datetime.date(2008, 5, 11)},
|
||||
... ])
|
||||
>>> for form in formset:
|
||||
.... print form.as_table()
|
||||
.... print(form.as_table())
|
||||
<input type="hidden" name="form-TOTAL_FORMS" value="3" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="2" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" />
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" value="Article #1" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" value="2008-05-10" id="id_form-0-pub_date" /></td></tr>
|
||||
|
@ -393,7 +393,7 @@ default fields/attributes of the order and deletion fields::
|
|||
>>> ArticleFormSet = formset_factory(ArticleForm, formset=BaseArticleFormSet)
|
||||
>>> formset = ArticleFormSet()
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><input type="text" name="form-0-title" id="id_form-0-title" /></td></tr>
|
||||
<tr><th><label for="id_form-0-pub_date">Pub date:</label></th><td><input type="text" name="form-0-pub_date" id="id_form-0-pub_date" /></td></tr>
|
||||
<tr><th><label for="id_form-0-my_field">My field:</label></th><td><input type="text" name="form-0-my_field" id="id_form-0-my_field" /></td></tr>
|
||||
|
|
|
@ -64,7 +64,7 @@ named ``media``. The media for a CalendarWidget instance can be retrieved
|
|||
through this property::
|
||||
|
||||
>>> w = CalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
|
||||
<script type="text/javascript" src="http://media.example.com/actions.js"></script>
|
||||
|
@ -139,7 +139,7 @@ basic Calendar widget from the example above::
|
|||
... js = ('whizbang.js',)
|
||||
|
||||
>>> w = FancyCalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<link href="http://media.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
|
||||
|
@ -159,7 +159,7 @@ declaration to the media declaration::
|
|||
... js = ('whizbang.js',)
|
||||
|
||||
>>> w = FancyCalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="http://media.example.com/fancy.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://media.example.com/whizbang.js"></script>
|
||||
|
||||
|
@ -221,7 +221,7 @@ was ``None``::
|
|||
... js = ('animations.js', 'http://othersite.com/actions.js')
|
||||
|
||||
>>> w = CalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://uploads.example.com/animations.js"></script>
|
||||
<script type="text/javascript" src="http://othersite.com/actions.js"></script>
|
||||
|
@ -229,7 +229,7 @@ was ``None``::
|
|||
But if :setting:`STATIC_URL` is ``'http://static.example.com/'``::
|
||||
|
||||
>>> w = CalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="/css/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://static.example.com/animations.js"></script>
|
||||
<script type="text/javascript" src="http://othersite.com/actions.js"></script>
|
||||
|
@ -252,12 +252,12 @@ If you only want media of a particular type, you can use the subscript operator
|
|||
to filter out a medium of interest. For example::
|
||||
|
||||
>>> w = CalendarWidget()
|
||||
>>> print w.media
|
||||
>>> print(w.media)
|
||||
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
|
||||
<script type="text/javascript" src="http://media.example.com/actions.js"></script>
|
||||
|
||||
>>> print w.media['css']
|
||||
>>> print(w.media)['css']
|
||||
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
|
||||
When you use the subscript operator, the value that is returned is a new
|
||||
|
@ -282,7 +282,7 @@ the resulting Media object contains the union of the media from both files::
|
|||
|
||||
>>> w1 = CalendarWidget()
|
||||
>>> w2 = OtherWidget()
|
||||
>>> print w1.media + w2.media
|
||||
>>> print(w1.media + w2.media)
|
||||
<link href="http://media.example.com/pretty.css" type="text/css" media="all" rel="stylesheet" />
|
||||
<script type="text/javascript" src="http://media.example.com/animations.js"></script>
|
||||
<script type="text/javascript" src="http://media.example.com/actions.js"></script>
|
||||
|
|
|
@ -556,7 +556,7 @@ This will create a formset that is capable of working with the data associated
|
|||
with the ``Author`` model. It works just like a regular formset::
|
||||
|
||||
>>> formset = AuthorFormSet()
|
||||
>>> print formset
|
||||
>>> print(formset)
|
||||
<input type="hidden" name="form-TOTAL_FORMS" value="1" id="id_form-TOTAL_FORMS" /><input type="hidden" name="form-INITIAL_FORMS" value="0" id="id_form-INITIAL_FORMS" /><input type="hidden" name="form-MAX_NUM_FORMS" id="id_form-MAX_NUM_FORMS" />
|
||||
<tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" maxlength="100" /></td></tr>
|
||||
<tr><th><label for="id_form-0-title">Title:</label></th><td><select name="form-0-title" id="id_form-0-title">
|
||||
|
@ -692,7 +692,7 @@ so long as the total number of forms does not exceed ``max_num``::
|
|||
>>> AuthorFormSet = modelformset_factory(Author, max_num=4, extra=2)
|
||||
>>> formset = AuthorFormSet(queryset=Author.objects.order_by('name'))
|
||||
>>> for form in formset:
|
||||
... print form.as_table()
|
||||
... print(form.as_table())
|
||||
<tr><th><label for="id_form-0-name">Name:</label></th><td><input id="id_form-0-name" type="text" name="form-0-name" value="Charles Baudelaire" maxlength="100" /><input type="hidden" name="form-0-id" value="1" id="id_form-0-id" /></td></tr>
|
||||
<tr><th><label for="id_form-1-name">Name:</label></th><td><input id="id_form-1-name" type="text" name="form-1-name" value="Paul Verlaine" maxlength="100" /><input type="hidden" name="form-1-id" value="3" id="id_form-1-id" /></td></tr>
|
||||
<tr><th><label for="id_form-2-name">Name:</label></th><td><input id="id_form-2-name" type="text" name="form-2-name" value="Walt Whitman" maxlength="100" /><input type="hidden" name="form-2-id" value="2" id="id_form-2-id" /></td></tr>
|
||||
|
|
|
@ -964,7 +964,7 @@ information about the URL pattern that matches a URL::
|
|||
# Resolve a URL
|
||||
match = resolve('/some/path/')
|
||||
# Print the URL pattern that matches the URL
|
||||
print match.url_name
|
||||
print(match.url_name)
|
||||
|
||||
A :class:`ResolverMatch` object can also be assigned to a triple::
|
||||
|
||||
|
|
|
@ -436,7 +436,7 @@ languages::
|
|||
|
||||
>>> from django.utils.translation import get_language_info
|
||||
>>> li = get_language_info('de')
|
||||
>>> print li['name'], li['name_local'], li['bidi']
|
||||
>>> print(li['name'], li['name_local'], li['bidi'])
|
||||
German Deutsch False
|
||||
|
||||
The ``name`` and ``name_local`` attributes of the dictionary contain the name of
|
||||
|
|
|
@ -172,7 +172,7 @@ This file should also be located in your ``site-packages`` directory.
|
|||
|
||||
.. code-block:: bash
|
||||
|
||||
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
|
||||
python -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())"
|
||||
|
||||
(Note that this should be run from a shell prompt, not a Python interactive
|
||||
prompt.)
|
||||
|
|
|
@ -83,7 +83,7 @@ function or method:
|
|||
.. code-block:: python
|
||||
|
||||
def my_callback(sender, **kwargs):
|
||||
print "Request finished!"
|
||||
print("Request finished!")
|
||||
|
||||
Notice that the function takes a ``sender`` argument, along with wildcard
|
||||
keyword arguments (``**kwargs``); all signal handlers must take these arguments.
|
||||
|
@ -125,7 +125,7 @@ receiver:
|
|||
|
||||
@receiver(request_finished)
|
||||
def my_callback(sender, **kwargs):
|
||||
print "Request finished!"
|
||||
print("Request finished!")
|
||||
|
||||
Now, our ``my_callback`` function will be called each time a request finishes.
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ If the signature or value have been altered in any way, a
|
|||
>>> try:
|
||||
... original = signer.unsign(value)
|
||||
... except signing.BadSignature:
|
||||
... print "Tampering detected!"
|
||||
... print("Tampering detected!")
|
||||
|
||||
By default, the ``Signer`` class uses the :setting:`SECRET_KEY` setting to
|
||||
generate signatures. You can use a different secret by passing it to the
|
||||
|
|
|
@ -319,29 +319,29 @@ def main(pythonpaths):
|
|||
found = search_python_list(python_code, to_search)
|
||||
|
||||
# Display:
|
||||
print t.absolute_filename
|
||||
print(t.absolute_filename)
|
||||
for r in t.relative_filenames:
|
||||
print u" AKA %s" % r
|
||||
print u" POST forms: %s" % num_post_forms
|
||||
print u" With token: %s" % (num_post_forms - len(form_lines_without_token))
|
||||
print(" AKA %s" % r)
|
||||
print(" POST forms: %s" % num_post_forms)
|
||||
print(" With token: %s" % (num_post_forms - len(form_lines_without_token)))
|
||||
if form_lines_without_token:
|
||||
print u" Without token:"
|
||||
print(" Without token:")
|
||||
for ln in form_lines_without_token:
|
||||
print "%s:%d:" % (t.absolute_filename, ln)
|
||||
print
|
||||
print u" Searching for:"
|
||||
print("%s:%d:" % (t.absolute_filename, ln))
|
||||
print('')
|
||||
print(" Searching for:")
|
||||
for r in to_search:
|
||||
print u" " + r
|
||||
print
|
||||
print u" Found:"
|
||||
print(" " + r)
|
||||
print('')
|
||||
print(" Found:")
|
||||
if len(found) == 0:
|
||||
print " Nothing"
|
||||
print(" Nothing")
|
||||
else:
|
||||
for fn, ln in found:
|
||||
print "%s:%d:" % (fn, ln)
|
||||
print("%s:%d:" % (fn, ln))
|
||||
|
||||
print
|
||||
print "----"
|
||||
print('')
|
||||
print("----")
|
||||
|
||||
|
||||
parser = OptionParser(usage=USAGE)
|
||||
|
@ -356,7 +356,7 @@ if __name__ == '__main__':
|
|||
settings = getattr(options, 'settings', None)
|
||||
if settings is None:
|
||||
if os.environ.get("DJANGO_SETTINGS_MODULE", None) is None:
|
||||
print "You need to set DJANGO_SETTINGS_MODULE or use the '--settings' parameter"
|
||||
print("You need to set DJANGO_SETTINGS_MODULE or use the '--settings' parameter")
|
||||
sys.exit(1)
|
||||
else:
|
||||
os.environ["DJANGO_SETTINGS_MODULE"] = settings
|
||||
|
|
|
@ -7,5 +7,5 @@ class Command(AppCommand):
|
|||
args = '[appname ...]'
|
||||
|
||||
def handle_app(self, app, **options):
|
||||
print 'EXECUTE:AppCommand app=%s, options=%s' % (app, sorted(options.items()))
|
||||
print('EXECUTE:AppCommand app=%s, options=%s' % (app, sorted(options.items())))
|
||||
|
||||
|
|
|
@ -14,4 +14,4 @@ class Command(BaseCommand):
|
|||
args = '[labels ...]'
|
||||
|
||||
def handle(self, *labels, **options):
|
||||
print 'EXECUTE:BaseCommand labels=%s, options=%s' % (labels, sorted(options.items()))
|
||||
print('EXECUTE:BaseCommand labels=%s, options=%s' % (labels, sorted(options.items())))
|
||||
|
|
|
@ -7,4 +7,4 @@ class Command(LabelCommand):
|
|||
args = '<label>'
|
||||
|
||||
def handle_label(self, label, **options):
|
||||
print 'EXECUTE:LabelCommand label=%s, options=%s' % (label, sorted(options.items()))
|
||||
print('EXECUTE:LabelCommand label=%s, options=%s' % (label, sorted(options.items())))
|
||||
|
|
|
@ -7,4 +7,4 @@ class Command(NoArgsCommand):
|
|||
|
||||
|
||||
def handle_noargs(self, **options):
|
||||
print 'EXECUTE:NoArgsCommand options=%s' % sorted(options.items())
|
||||
print('EXECUTE:NoArgsCommand options=%s' % sorted(options.items()))
|
||||
|
|
|
@ -166,7 +166,7 @@ class CustomOptionsTestRunner(simple.DjangoTestSuiteRunner):
|
|||
self.option_c = option_c
|
||||
|
||||
def run_tests(self, test_labels, extra_tests=None, **kwargs):
|
||||
print "%s:%s:%s" % (self.option_a, self.option_b, self.option_c)
|
||||
print("%s:%s:%s" % (self.option_a, self.option_b, self.option_c))
|
||||
|
||||
|
||||
class CustomTestRunnerOptionsTests(AdminScriptTestCase):
|
||||
|
|
|
@ -126,7 +126,7 @@ def setup(verbosity, test_labels):
|
|||
# this module and add it to the list to test.
|
||||
if not test_labels or module_name in test_labels_set:
|
||||
if verbosity >= 2:
|
||||
print "Importing application %s" % module_name
|
||||
print("Importing application %s" % module_name)
|
||||
mod = load_app(module_label)
|
||||
if mod:
|
||||
if module_label not in settings.INSTALLED_APPS:
|
||||
|
@ -178,7 +178,7 @@ def bisect_tests(bisection_label, options, test_labels):
|
|||
from django.db.models.loading import get_apps
|
||||
test_labels = [app.__name__.split('.')[-2] for app in get_apps()]
|
||||
|
||||
print '***** Bisecting test suite:',' '.join(test_labels)
|
||||
print('***** Bisecting test suite: %s' % ' '.join(test_labels))
|
||||
|
||||
# Make sure the bisection point isn't in the test list
|
||||
# Also remove tests that need to be run in specific combinations
|
||||
|
@ -202,44 +202,44 @@ def bisect_tests(bisection_label, options, test_labels):
|
|||
midpoint = len(test_labels)/2
|
||||
test_labels_a = test_labels[:midpoint] + [bisection_label]
|
||||
test_labels_b = test_labels[midpoint:] + [bisection_label]
|
||||
print '***** Pass %da: Running the first half of the test suite' % iteration
|
||||
print '***** Test labels:',' '.join(test_labels_a)
|
||||
print('***** Pass %da: Running the first half of the test suite' % iteration)
|
||||
print('***** Test labels: %s' % ' '.join(test_labels_a))
|
||||
failures_a = subprocess.call(subprocess_args + test_labels_a)
|
||||
|
||||
print '***** Pass %db: Running the second half of the test suite' % iteration
|
||||
print '***** Test labels:',' '.join(test_labels_b)
|
||||
print
|
||||
print('***** Pass %db: Running the second half of the test suite' % iteration)
|
||||
print('***** Test labels: %s' % ' '.join(test_labels_b))
|
||||
print('')
|
||||
failures_b = subprocess.call(subprocess_args + test_labels_b)
|
||||
|
||||
if failures_a and not failures_b:
|
||||
print "***** Problem found in first half. Bisecting again..."
|
||||
print("***** Problem found in first half. Bisecting again...")
|
||||
iteration = iteration + 1
|
||||
test_labels = test_labels_a[:-1]
|
||||
elif failures_b and not failures_a:
|
||||
print "***** Problem found in second half. Bisecting again..."
|
||||
print("***** Problem found in second half. Bisecting again...")
|
||||
iteration = iteration + 1
|
||||
test_labels = test_labels_b[:-1]
|
||||
elif failures_a and failures_b:
|
||||
print "***** Multiple sources of failure found"
|
||||
print("***** Multiple sources of failure found")
|
||||
break
|
||||
else:
|
||||
print "***** No source of failure found... try pair execution (--pair)"
|
||||
print("***** No source of failure found... try pair execution (--pair)")
|
||||
break
|
||||
|
||||
if len(test_labels) == 1:
|
||||
print "***** Source of error:",test_labels[0]
|
||||
print("***** Source of error: %s" % test_labels[0])
|
||||
teardown(state)
|
||||
|
||||
def paired_tests(paired_test, options, test_labels):
|
||||
state = setup(int(options.verbosity), test_labels)
|
||||
|
||||
if not test_labels:
|
||||
print ""
|
||||
print("")
|
||||
# Get the full list of test labels to use for bisection
|
||||
from django.db.models.loading import get_apps
|
||||
test_labels = [app.__name__.split('.')[-2] for app in get_apps()]
|
||||
|
||||
print '***** Trying paired execution'
|
||||
print('***** Trying paired execution')
|
||||
|
||||
# Make sure the constant member of the pair isn't in the test list
|
||||
# Also remove tests that need to be run in specific combinations
|
||||
|
@ -259,14 +259,14 @@ def paired_tests(paired_test, options, test_labels):
|
|||
subprocess_args.append('--noinput')
|
||||
|
||||
for i, label in enumerate(test_labels):
|
||||
print '***** %d of %d: Check test pairing with %s' % (
|
||||
i+1, len(test_labels), label)
|
||||
print('***** %d of %d: Check test pairing with %s' % (
|
||||
i + 1, len(test_labels), label))
|
||||
failures = subprocess.call(subprocess_args + [label, paired_test])
|
||||
if failures:
|
||||
print '***** Found problem pair with',label
|
||||
print('***** Found problem pair with %s' % label)
|
||||
return
|
||||
|
||||
print '***** No problem pair found'
|
||||
print('***** No problem pair found')
|
||||
teardown(state)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
Loading…
Reference in New Issue