J'ai essayé dbsettings (ainsi que la nouvelle fourchette sur github), et ils sont utiles - mais un peu trop lourd pour mes besoins. Au lieu de cela, j'ai implémenté une méthode plus simple. Je l'ai fait en utilisant un JSONField (à partir de Postgres 9.3) - mais vous pouvez utiliser un TextField (utilisez max_length = 1000 ou somesuch) car il est plus simple d'expliquer aux gens comment entrer une chaîne au lieu de JSON:
1) Tout d'abord, construire votre propre modèle Paramètres (peut-être dans le noyau/models.py):
class Setting(models.Model):
"""
Model for site-wide settings.
"""
name = models.CharField(max_length=200, help_text="Name of site-wide variable")
value = JSONField(null=True, blank=True, help_text="Value of site-wide variable that scripts can reference - must be valid JSON")
def __unicode__(self):
return self.name
2) Ensuite, ajoutez une interface d'administration (dans le noyau/admin.py):
class SettingAdmin(admin.ModelAdmin):
list_display = ['name', 'value']
admin.site.register(Setting, SettingAdmin)
3) Créez et exécutez vos migrations:
python manage.py schemamigration core --auto
python manage.py migrate core
4) Ajouter à la partie supérieure de base.html:
<script type="text/javascript">
//Auto-exported site-wide settings
{% autoescape off %}var site_settings = {{ settings|safe|default:"{}" }};{% endautoescape %}
</script>
5) construire un 'injecteur' qui ajoute le code à chaque demande (probablement en noyau/contextprocessors.py)
from models import Setting
import json
def app_settings(request):
"""Global values to pass to templates"""
settings_dict = dict()
settings = dict()
for obj in Setting.objects.all():
settings[obj.name] = obj.value
settings_dict['settings'] = json.dumps(settings)
return settings_dict
5) Ensuite, ajoutez les processeurs de contexte à votre site settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
...,
'<yourapp>.core.contextprocessors.app_settings',
)
6) Connectez-vous à votre page d'administration via un navigateur et crea Té un paramètre:
http://yoursite/admin/core/setting/
Add a new setting, something like:
cell_status_colors
with a value of:
["green","red"] (note this has to be valid JSON, so use quotes around strings)
or:
daily_header
with a value of:
{"text":"Tomorrow only, free shipping!"}
7) Et enfin, devrait être en mesure d'appeler chacun de vos fichiers javascript via ces JS standard:
var colors = site_settings.cell_status_colors || ["green","red"];
var msg_text = site_settings.daily_header || {"text":""};
Merci. Une idée de comment je pourrais désactiver le bouton 'ajouter nouveau' dans l'admin de Django - c'est-à-dire comment je pourrais faire de ce champ un modèle qui ne contient qu'une seule entrée? – AP257
Tard à la fête, et j'espère vraiment que vous avez résolu cela avant maintenant.Pour la postérité, vous pouvez supprimer l'accès à "créer" en désactivant la permission ' | | Peut ajouter 'pour le groupe ou l'utilisateur concerné. –
melwil