Is there any adequate scaffolding for Django? (A la Ruby on Rails)

☆樱花仙子☆ 提交于 2019-12-02 17:32:45

I've looked and not yet found something for Django quite like the Rails Generate command. Django has a bit of a different philosophy. It gives you tools to make doing things easily but doesn't actually do it for you (except the admin interface). In the grand scheme of things, I think this is OK. When I use rails' scaffolding I'm not able to often keep much of the auto-generated stuff. When I do, the django admin interface would probably also have worked and given me more functionality.

Instead, what I suggest is reading through the Django tutorial step 4, which introduces generic views, and then chapter 7 of the Django book which introduces forms. You have to be patient on chapter 7 because the authors think you want to know the minute details of the hard-way before they teach you the easy way. (try searching the page for the phrase django.forms)

In the end the amount of work you have to do between rails and django is equivalent, and maybe slightly less with Django. However you don't have one command to automatically give you boilerplate code to use as a foundation.

So Django 1.3 still lacks 'scaffold' functionality. Not good. What is best in scaffold, is that it allows developer to immediately start with the project, without recalling all 'models', 'urls' and 'views' syntaxes.

Look at this example, let's start new project and app:

$django-admin startproject mysite
$python manage.py startapp blog

and now we need to manually 'START' everything, from almost empty files. BUT it would be very convenient to do it in this way (like in rails)

$python manage.py scaffold app:blog model:Post title:string content:text 

This should give us: models.py

class Post(models.Model):
    title    = models.CharField
    content  = models.TextField

views.py

def index(request):
    posts = Post.objects.all().order_by('-id')
    return render_to_response('blog/index.html', {'posts': posts})

and update urls.py somehow, ... or not, this is more complicated but less needed.

This should not be difficult to implement in future Django releases. I would do this if I had enough knowledge and experience in Django. Unfortunately I'm not doing many Django projects and that's why I need this functionality.

This one is closer to rails-like scaffolding: https://github.com/modocache/django-generate-scaffold

I found this: https://github.com/madhusudancs/django-groundwork

Looks like it is exactly what you're looking for. Hope it helps.

I just used the scaffold helper/management command provided by Django Common and it seems to have set up a decent chunk of boilerplate code. The options are limited, but decent enough.

I skimmed through the code and most of it looks fine. I needed to do a little bit of cleaning up, once the scaffolding was 'erected', though:

  • Separate import lines were added for each model created. Merged them.
  • The templates still carried the old (1.4) url template tag specs. Modified them to reflect the new (1.5) specs, i.e. enclosed the second parameter in single quotes, in each of the html files created, for each of the models.
  • Updated the main urls.py with an include for the app.urls module.
  • I use a non-standard settings.py setup - three separate files common.py, dev.py and prod.py for my setup. Had to add the app manually to the installed apps. YMMV.

(Will edit this list if I think of anything else)

That being said, looking at the amount of boilerplate code that I did NOT have to write, I'd say it does a very good job!

As of now, the repo seems pretty well-maintained - the last commit was 18 days ago at the time of writing this response. I'll probably submit a pull request/raise an issue about the problems I faced on their repo, some time soon.

You may check django-addview. It is meant to do boring, mundane steps needed to add new view automatically with nice ncurses GUI. What it does for you:

  • Extend CBV or write function
  • Fill parameters of CBV
  • Creates template in given location
  • Edits urls.py for you
  • Cares about all imports

Full disclosure: I wrote it.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!