Hi Kirby. Interesting idea. I'm not familiar with subdomains, but I will definitely try this.
Thanks for the help, Jorge On Tuesday, August 27, 2013 4:12:47 PM UTC+2, C. Kirby wrote: > > 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.

