python - runserver - libro django 2018
¿Pueden los comandos personalizados de Django manage.py devolver un valor? ¿Cómo, o por qué no? (1)
Si desea obtener la salida de call_command()
, necesita capturar la salida call_command()
. Así es como puedes hacerlo:
out = StringIO()
call_command(''call_custom_command'', stdout=out)
value = out.getvalue()
print value
Esta técnica se usa realmente en las pruebas de django para probar los comandos de administración.
Manifestación:
>>> from django.core.management import call_command
>>> from StringIO import StringIO
>>> out = StringIO()
>>> call_command(''validate'', stdout=out)
>>> out.getvalue()
''0 errors found/n''
Espero que ayude.
Siguiendo la documentación: https://docs.djangoproject.com/en/dev/howto/custom-management-commands/
Creé mi propio comando personalizado (llamado otra cosa, pero el ejemplo se muestra a continuación):
from django.core.management.base import BaseCommand, CommandError
from polls.models import Poll
class Command(BaseCommand):
args = ''<poll_id poll_id ...>''
help = ''Closes the specified poll for voting''
def handle(self, *args, **options):
for poll_id in args:
try:
poll = Poll.objects.get(pk=int(poll_id))
except Poll.DoesNotExist:
raise CommandError(''Poll "%s" does not exist'' % poll_id)
poll.opened = False
poll.save()
self.stdout.write(''Successfully closed poll "%s"'' % poll_id)
return "Yay"
La pregunta es, ¿cómo es que devolver una cadena como "Yay" no funciona? ¿Lo estoy haciendo mal o no es posible?
Cuando llamo el comando personalizado desde mi vista, hago algo como:
value = call_command(''call_custom_command'', parameter)
print value
pero el valor se muestra como Ninguno.