11
votes

Django: Comment passer des paramètres individuels à gérer.py

Je cherche un moyen de remplacer / définir un paramètre Django individuel de la ligne de commande sans fichiers de paramètres supplémentaires.

Ce dont j'ai besoin maintenant, c'est de définir le réglage de débogage ou le niveau de journalisation à chaque fois lorsque j'exécute ma commande de gestion. Mais ce serait bien de pouvoir définir n'importe quoi.


2 commentaires

Voulez-vous définir le débogage chaque fois python manage.py runserver appelé ou vous avez votre commande personnalisée python manage.py foo et vous voulez définir le débogage à l'intérieur?


Je veux définir n'importe quel paramètre pour n'importe quelle commande. Comme ceci: ./ manage.py --set = "débogue = true" runserver . Peut-être le moyen le plus facile est d'exécuter une valeur de paramètre de ligne de commande directement dans les paramètres.py. Mais j'espérais qu'il y a un moyen de ne pas modifier du tout le code source.


4 Réponses :


2
votes

Vous pouvez ajouter une option personnalisée (ex. niveau de journal) à votre commande. docs

Exemple: p>

from optparse import make_option

class Command(BaseCommand):
    option_list = BaseCommand.option_list + (
        make_option('--delete',
            action='store_true',
            dest='delete',
            default=False,
            help='Delete poll instead of closing it'),
        )
    # ...


1 commentaires

Merci Denis. Bien sûr que je peux. Mais je ne veux pas ajouter cette option à chaque commande dans chaque projet. Je cherche une méthode plus universelle.



-1
votes

Vous pouvez faire vos paramètres.py plus conscient de son environnement actuel:

'ENGINE': 'sqlite3' if 'test_coverage' in sys.argv else 'django.db.backends.postgresql_psycopg2',


3 commentaires

Merci. Cette méthode nécessite des modifications pour toute constante que je dois remplacer. Pas exactement ce que je veux.


Il n'existe pas de constante dans Python, toute variable peut être reliée. Bonne chance.


Ce ne est pas important. Disons le réglage, pas constant :)



7
votes

Voici ma solution. Ajoutez le code ci-dessous au bas de votre fichier de paramètres.

./manage.py runserver --set="DEBUG=True ; TEMPLATE_DEBUG=True"


5 commentaires

Je pense que cela n'est possible que car Django n'offre aucun crochet pour les arguments de la ligne de commande de prétraitement. Je me demande pourquoi vous en avez besoin?


Salut Kirill. Merci pour votre commentaire. Je n'étais pas sûr de cela. Aussi ce que je n'aime pas sur ma solution, c'est la façon dont je stocke la valeur d'option. Mais je n'ai pas trouvé de meilleur moyen de sauvegarder l'option entre les importations.


Pourquoi j'en ai besoin que cela soit simplement parce que c'est un moyen rapide et facile de modifier tout réglage pendant le processus de développement. Je peux jouer avec des paramètres sans modifier le fichier de paramètres. Et je peux être sûr d'oublier d'oublier de changer les choses (cela fait parfois problème). En outre, cela peut être utile pour la production. Il est possible de modifier des paramètres pour une tâche individuelle sur cron / céleri / etc. En ce moment, ce dont j'ai besoin, c'est d'exécuter une commande de gestion pour moi avec la sortie de débogage et pour mon partenaire avec une sortie utile uniquement. Je n'ai pas l'impression de changer la commande pour de tels besoins.


Vous pouvez utiliser un fichier de paramètres local. Vous en avez probablement déjà un, car vous avez différentes informations de connexion de la base de données dans le développement comme dans la production. Ce fichier de paramètres local ne serait pas remplacé par la caisse et vous risquez de ne pas risquer d'oublier les paramètres de connexion.


@Andrasgyomrey La question concerne les arguments de la ligne de commande.



1
votes

dans Paramètres.py Vous pouvez vérifier les arguments de ligne de commande, comme celui-ci: XXX PRE>

Utilisation: P>

./manage.py test --enable-wiki MyApp.tests


0 commentaires