My site has few global configurations. For example "smtp-server address", "company address", etc.
Of course I can:
- Create variables in
settings.pyand use it in templates and apps; - Create a model (like
Configuration) and write all needed fields there.
If I use the first way I can’t give access for changing these fields in django-admin.
If I use the seconds way it is not a beautiful solution, because everywhere in the code I have to use model_name.objects.get(id=1) and I need only one instance. Models were created for other tasks.
How can I solve this problem?
This is what I did. Might not be the most optimal solution but works for me.
Create a Configuration model and do all the usual stuff as in your point 2. Create a function (say in
configuration.view) which will pull out and return the configuration values in a dict.Now in your
settings.py, import your function and set the returned dict to asettings.pyvariable:CONFIG = configuration.view.get_config()Create a template context processor which will set this
CONFIGdict in the template context.Add this context processor to your
TEMPLATE_CONTEXT_PROCESSORSNow you are free to use your configuration parameters in templates as
{{my_config_key}}Hope this helps.