Can each of the different requirements websites be on a different third-level or subdomain? (If your site is foo.com either bar.foo.com, baz.foo.com or foo.com/bar, foo.com/baz_ If so, I would deploy multiple Apache VirtualHosts, each serving an instance of your project. That way the projects can be identical, you have a single codebase to work from, and your different requirements can be handled in each projects settings.py.
Would this work? On Tuesday, August 27, 2013 4:20:29 AM UTC-5, J. C. Leitão wrote: > > Hi. > > I'm using Django in a website and I need to use a given app in the website > more than one time. I know this is kind of tricky to do in Django since > there can be no name collisions. > > *What I'm searching* is more or less equivalent to what stack exchange > network does: a "framework" applied on specific topics. In my case I want > this to be on the same website, for instance for *different topics*, or > *different > languages/communities* (in the sense that the app is translated > differently *and* the users also add content in different > languages/tables that *are not meant* to be translated/shared between > communities). However, like in stack, I want most of the the server-side > code and logic to be preserved (what I here call the framework). > > Notice that each specific instance of the framework must be a Django's app > since it needs specific tables. > > *The problem* I'm already able to implement this, but the way I'm doing > is not easily maintainable. > > *The question:* I'm asking for help and general suggestions on the > approach. Ultimately, I would like to know: is this because I'm having some > bad design choice on web development in general, am I doing a bad design > choice in Django in particular, or is this because Django was not prepared > for this situation? > > Next I explain how I did this, in the bottom I explain the maintainability > issue. > > Implementation > > The idea is: I have a main app for controlling the website and its > authentication (with a MainUser model with a one-to-one to the default > user) and I attach apps. > > The app I want to repeat on the website has a specific name appname(something > that cannot possibly collide with any string), and a specific > user (appname.User), a subclass of main.MainUser. > > What I learn during this whole process: > > One requirement for repeating an app is that every connection of itself to > other app requires a custom related_name, as explained in django docs > be-careful-with-related-name<https://docs.djangoproject.com/en/dev/topics/db/models/#be-careful-with-related-name>. > > In my case, *so far* there is only one connection, the appname.User, that > has a field of the form: > > # this is because a copy of this app would make mainuser.user to clash > mainuser_ptr = models.OneToOneField(MainUser, > related_name="%(app_label)s_%(class)s", parent_link=True) > > The next requirement is avoiding url collisions: I use names for every url > and I prefixed them with appname_. > > The next requirement is static and templates. They are set to be of the > form static/appname/<appname_static> and equivalent to templates. > > Given these requirements, I can repeat the app by doing the following > magic: > > 1. I make a copy of the app's directory. > 2. Change its name to the new app's name, newappname, and every directory > herein from appname to newappname (e.g. static,templates). > 3. For every string in the app's directory, I substitute the appname with > newappname. > 4. I run ./manage.py syncdb (if it was the first time the app was created, > or use south to migrate the tables, since the migrations are already made). > > I can then change templates, static and translations for the new app (in > templates/, static/, locale/ respectively). > > Maintainability > > If I want to implement a new feature in the framework (a feature that is > new to all apps), I have to implement it on one app and then re-deploy it > on every app. That or code the implementation on each app. As you might > understand, this is not efficient: by design this is code difficult to > maintain (e.g. the version control will have lots of changes that are only > due to copy/paste). > > So, bottom line, I have a copy of the same framework with different names. > I made this choice because I needed the same logic with different databases > and static content (static, translations). It seems to me that I'm > searching for an Abstract app, in the same spirit of an Abstract model. > However, I'm not sure this even makes sense, either in Django or in Web > development in general. > > Thank you for your time, > Jorge > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/django-users. For more options, visit https://groups.google.com/groups/opt_out.

