Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Site configuration in django-admin

My site has few global configurations. For example "smtp-server address", "company address", etc.

Of course I can:

  1. Create variables in settings.py and use it in templates and apps;
  2. 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?

like image 517
SkyFox Avatar asked Mar 25 '12 07:03

SkyFox


1 Answers

This is what I did. Might not be the most optimal solution but works for me.

  1. 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.

  2. Now in your settings.py, import your function and set the returned dict to a settings.py variable: CONFIG = configuration.view.get_config()

  3. Create a template context processor which will set this CONFIG dict in the template context.

    def init_site_settings(request):
        return settings.CONFIG
    
  4. Add this context processor to your TEMPLATE_CONTEXT_PROCESSORS

  5. Now you are free to use your configuration parameters in templates as {{my_config_key}}

Hope this helps.

like image 93
Husain Basrawala Avatar answered Oct 17 '22 03:10

Husain Basrawala