Django directory design philosophy question

179 views
Skip to first unread message

左小龙

unread,
May 26, 2017, 9:57:04 PM5/26/17
to Django developers (Contributions to Django itself)
1. Why not create urls.py for every app when user run startapp command? I think most app need urls.py except when using other framework like django-rest-framework.

2. When we run `django-admin startproject mysite` will also create an inner directory call mysite which is very confuse to newbie.  Some people recommend use `django-admin startproject mysite .`(comma at the last) instead. Should we also recommend this in the document?

Adam Johnson

unread,
May 28, 2017, 9:14:09 AM5/28/17
to django-d...@googlegroups.com
1. I don't see why not. Even DRF apps need urls.py files right?
2. I think this is a minor issue and not worth worrying about, newbies should be able to move files and folders around appropriately on the filesystem. It's cleaner to put things in a subdirectory as it lowers the risk of overwriting existing files in the current directory.

On 27 May 2017 at 02:51, 左小龙 <wiwi...@gmail.com> wrote:
1. Why not create urls.py for every app when user run startapp command? I think most app need urls.py except when using other framework like django-rest-framework.

2. When we run `django-admin startproject mysite` will also create an inner directory call mysite which is very confuse to newbie.  Some people recommend use `django-admin startproject mysite .`(comma at the last) instead. Should we also recommend this in the document?

--
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+unsubscribe@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.
To view this discussion on the web visit https://groups.google.com/d/msgid/django-developers/87e879d8-3674-4b96-973d-f1dd0b4a1148%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.



--
Adam

Aymeric Augustin

unread,
May 28, 2017, 10:04:31 AM5/28/17
to django-d...@googlegroups.com
Hello,

Sorry Adam, I'm going to argue for the opposite position on both questions ;-)

I don't think it's a good idea for add urls.py to startapp for three reasons:

a. Even though Django's built-in boilerplates (startprojet and startapp) are fairly minimal, I've seen many projets with the dummy models, admin or tests module committed in a bunch of apps, creating noise. More files will make that problem worse. (I'll admit I'm not a huge fan of boilerplates in general.)

b. Some developers like giving each app its own URL space. Others prefer keeping all URLs in a central location. Small projects can stick with the simplest thing that works and a central URLconf does the job up to a few dozen routes. Large projects, by the time they become large, have had the time to understand the tradeoffs and figure out what structure works best for them. I think startapp is most useful to people with little Django experience and splitting urls.py is a premature optimization for them.

c. Unlike admin.py which is autodiscovered, urls.py won't do anything until it's referenced from the main URLconf. It would be misleading to add a module that doesn't work. I think the potential for confusion may outweigh the usefulness.

Regarding the target directory of startproject, I'm in favor of the proposal. Here's the background:

The default behavior keeps biting me, even though I no longer qualify myself as a Django newbie, and I'm not the only one who finds it surprising. Unix commands operate in the current directory unless told otherwise: example: `ls` vs. `ls path/to/directory`.

Certainly files can be moved around after the fact — I do it every time — but this doesn't excuse the counter-intuitive API. I don't have the energy to argue for breaking backwards-compatibility here. But I'm strongly in favour of acknowledging this bug in the documentation (I haven't checked what it looks like currently).

Best regards,

-- 
Aymeric.


To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.

Adam Johnson

unread,
May 28, 2017, 1:15:28 PM5/28/17
to django-d...@googlegroups.com
On (2), cookiecutter's behaviour is to create a new directory and it probably gets more traffic than startproject.

-- 
Aymeric.


--
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+unsubscribe@googlegroups.com.
To post to this group, send email to django-developers@googlegroups.com.
Visit this group at https://groups.google.com/group/django-developers.

For more options, visit https://groups.google.com/d/optout.



--
Adam

Josh Smeaton

unread,
Jun 4, 2017, 6:16:21 PM6/4/17
to Django developers (Contributions to Django itself)
I agree that creating a "project" subdirectory inside the code directory, that's usually named the same thing, can be quite confusing. I'd like to see some kind of improvement here, but I haven't done the research to see what makes sense.

The cognitive overhead of myproject/myproject, especially in the tutorial, can be especially confusing.
-- 
Aymeric.


To unsubscribe from this group and stop receiving emails from it, send an email to django-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.



--
Adam

--
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-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.

--
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-develop...@googlegroups.com.
To post to this group, send email to django-d...@googlegroups.com.



--
Adam
Reply all
Reply to author
Forward
0 new messages