Coding standards for Django apps: names
| by jpic | django best-practiceThis post shows a coding standard which emerged from the Pinax community (formerly hot-club)[source needed] for predictive and consistent URL naming patterns. While this is still supported by Django, namespaced URL include()
has been as well for some years now and urls should be translated when upgrading Django versions. Django Contributing Commons maintains a technical description which you can reuse in your project. Check it out and try to contribute, this could be a nice community driven git based coding standards for Django !
Here goes, for history:
Naming stuff in Django apps consists of using:
- the application name
- a model name
- an action name
Naming views
View names are composed of 2 items which are separated by an underscore:
- the model name
- the action name
Common cases are:
- post_detail
- band_create
- user_list
- group_delete
Naming urls, legacy
My standard is older that namespaced urls. It is composed of the following elements separated by an underscore:
- app name
- view name as above
For example:
- blog_post_detail
- band_band_create
- auth_user_list
- auth_group_delete
band_band_create ? Well if the url is for creating a Band model instance from the band app, so that’s pretty self-documenting.
Prefixing url names with the application name was a very nice way of avoiding conflicts between url names.
Naming urls with namespaces
Since Django 1.1, this is not necessary anymore because of namespaced urls inclusion. Instead of including your blog app urls as such:
url(r'blog/', include('blog.urls')),
And reversing as such:
{% url 'blog_post_detail' post.pk %}
You could include your blog app urls with the blog app namespace:
url(r'blog/', include('blog.urls', app_name='blog'))
Thus, if you named the post_detail view url just post_detail, there should be no conflict reversing as such:
{% url 'blog:post_detail' post.pk %}
Both are good as long at it is consistent per app.
Naming templates
Templates should live in an application-specific directory be named after their views. For example:
- blog/post_detail.html
- band/band_create.html
- auth/user_list.html
- auth/group_delete.html