Hi all,

I didn't find anything about that in the archive here, so I'd like to
come to you with an idea which is either very dumb (please tell me) or I
don't know why anyone hasn't thought about it...

I'm starting a bigger project with a self-created plugin system (GDAPS,
alrady mentioned). Working nicely, but I came across a few Django
shortcomings which are sometimes easy to workaround, but could be done
better: the django project name.

TL;DR: Django has no (builtin/explicit) settings variable like
PROJECT_NAME. Should have.

Long version:

If you have (like in my case) an application which is more than a single
django app, and could have various 3rd party additions/plugins, there is
no common sense of retrieving the overall "name" of the application. If
you create a project using django-admin startproject myproject - the
name says it, you name the project. It is written into various places,
mostly comments etc.:

    foo/asgi.py:ASGI config for foo project.
    foo/asgi.py:os.environ.setdefault('DJANGO_SETTINGS_MODULE',
    'foo.settings')
    foo/settings.py:Django settings for foo project.
    foo/settings.py:ROOT_URLCONF = 'foo.urls'
    foo/settings.py:WSGI_APPLICATION = 'foo.wsgi.application'
    foo/urls.py:"""foo URL Configuration
    foo/wsgi.py:WSGI config for foo project.
    foo/wsgi.py:os.environ.setdefault('DJANGO_SETTINGS_MODULE',
    'foo.settings')
    manage.py:    os.environ.setdefault('DJANGO_SETTINGS_MODULE',
    'foo.settings')

But foo is no variable. Needers of this inofficial project name use
workarounds like settings.ROOT_URLCONF[0] to get that name. But that's
always a bit of a whacky feeling when I do it - doesn't seem like - "I'm
sure this will be supported for the next 20 years".

When it comes to frontends, it's worse. In my case, my GDAPS module
enables a Vue.js frontend, which needs a index.html which loads Vue.
This file is (in SPA apps) the only file which is rendered using Django
templates. No problem, put in gdaps' templates directory and go. Works
fine, as long as the user of GDAPS is fine with my shipped index.html
and the corresponding pre-defined url path that renders that index file
using TemplateView.

If he wants to override that file using his own template (with maybe
another font loaded etc.) I first thought I just change GDAPS to
dynamically load the template in GDAPS' urls.py - but therefore it
should know the name of the project it is a part of.

I can do that using a setting named PROJECT_NAME and place a url
definition like

path("",
TemplateView.as_view(template_name=os.path.join(settings.ROOT_URLCONF[0],"index.html")),
name="app")

into urls.py. So the user can place an index.html into foo/templates/foo/ and 
it should work.

But as said, this seems to me as - hey, ROOT_URLCONF[0] - really, this is the 
project name?

path("",
TemplateView.as_view(template_name=os.path.join(settings.PROJECT_NAME,"index.html")),
name="app")

seems better to me.
I first thought that Django could provide that as "builtin" setting, but OTOH, 
explicit is better than implicit,
so why not
a) create a setting (which is created by django-admin createproject along with 
the other parsed templates) named
PROJECT_NAME o DJANGO_PROJECT_NAME
or
b) (because settings are not used in wsgi.py, manage.py etc.) create it earlier 
in the process - or does it have to be written at more than one places?
This would violate DRY.

Please tell me what you think about that.

Yours,
Christian

-- 
Dr. Christian González
https://nerdocs.at

-- 
You received this message because you are subscribed to the Google Groups 
"Django developers  (Contributions to Django itself)" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-developers+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-developers/37527e26-4e21-2684-5766-145441c6ae50%40nerdocs.at.

Attachment: pEpkey.asc
Description: application/pgp-keys

Reply via email to