I am also in need of such a flexible yet easy to manage content system, mostly for small company websites.
In my primitive prototype, I have pages that are built-up of sections. Each section has its own template and can hold text, images, etc. Also, I am planning to add the ability to display data dynamically form another application. I am not willing to write the content administration part, but this flexibility makes it very hard to manage content using the built-in admin application. For example, a 50 page website with 10 sections per page on average shows up as a list of 500 sections, which is not very practical to manage. That's why I am not very satisfied with my application and would like to hear from others about this. There is nothing fancy about my model but just for reference, here it is: class SectionType(models.Model): name = models.CharField(maxlength = 50) def __str__(self): return self.name class Admin: pass class Section(models.Model): type = models.ForeignKey(SectionType) title = models.CharField(maxlength = 150, blank = True) body = models.TextField(blank = True, null = True) def __str__(self): return '%s (%s)' % (self.title, self.type) class Admin: pass class SectionImage(models.Model): section = models.ForeignKey(Section, edit_inline = models.STACKED, null = True) image = models.ImageField(upload_to = 'section/image/') class Admin: pass class Page(models.Model): title = models.CharField( maxlength = 100, core = True, db_index = True) slug = models.SlugField(prepopulate_from = ('title',)) body = models.TextField(blank = True, null = True) sections = models.ManyToManyField(Section, blank = True, null = True) parent = models.ForeignKey('self', blank = True, null = True) order = models.PositiveSmallIntegerField(blank = True, null = True) related_pages = models.ManyToManyField('self', blank = True, null = True) def __str__(self): parents = '' parent = self.parent while parent: parents = '%s :: %s' % (parent.title, parents,) parent = parent.parent return '%s%s (%s)' % (parents, self.title, self.slug) def get_absolute_url(self): return '%s/' % (self.slug) class Admin: pass On 7 Haziran, 10:39, "patrick k." <[EMAIL PROTECTED]> wrote: > this is just another request for feedback. I know that there are some > newspaper-sites out there, made with django. so, I assume, they´ve > solved this issue. It´d be great to know how they make/construct the > overview- resp. front-pages (in a way to make changes easily for > editors). > > thanks, > patrick > > Am 03.06.2007 um 19:28 schrieb oggie rob: > > > > > Ahh, yeah, I suppose so! I didn't really think the rendered text > > through, and you're right that it has the same flexibility. > > > -rob > > > On Jun 3, 2:40 am, "patrick k." <[EMAIL PROTECTED]> wrote: > >> actually, I don´t have to change the view for whatever layout I want > >> to have with my approach ... > > >> patrick > > >> Am 03.06.2007 um 00:40 schrieb oggie rob: > > >>> The advantage is you get to organize your additions in the base > >>> template (which is where you should strive to manage layout & L&F as > >>> much as possible). Your solution works fine for a row-by-row > >>> example, > >>> but is less flexible for a more complex layout. For example, if you > >>> want to have a two- or three-column view, it is easier to manage > >>> this > >>> by changing it once in the base template than trying to tweak the > >>> view > >>> function. What's more, portals are often associated with "skins" > >>> - it > >>> would be much more flexible to have the choice of a few "base" > >>> templates (representing different skins) with completely different > >>> layouts for the "sub" templates. If you were looking for a generic > >>> solution, I think you should consider that. > > >>> Not sure about how the "specific template" would fit in there > >>> though... but I don't see major limitations with the approach I > >>> described vs. your original proposal. In a case where you can't > >>> generalize the view you probably want to save it as an html > >>> snippet in > >>> the database, I suppose. > > >>> -rob > > >>> On Jun 2, 11:16 am, "patrick k." <[EMAIL PROTECTED]> wrote: > >>>> what´s the advantage of including the sub-templates in the template > >>>> instead of rendering them in the view? > >>>> rendering the templates in the view seems to be a bit more flexible > >>>> when it comes to caching, I guess. > > >>>> besides, a custom entry could have its own specific template - > >>>> so, I > >>>> ´m not sure how you´d deal with this. > > >>>> thanks, > >>>> patrick > > >>>> Am 02.06.2007 um 20:07 schrieb oggie rob: > > >>>>> Using the "include" tag, you can provide the template through a > >>>>> variable > >>>>> e.g. {% include template1 %} instead of {% include 'mysite/ > >>>>> movies.html' %} > >>>>> so you can pass this stuff from the view. > >>>>> What's more, the include template uses the context from the > >>>>> "parent" > >>>>> template. So you can also pass all this information from the view. > >>>>> For example, your view could work as follows (code is littered > >>>>> with > >>>>> mistakes but you should get the idea): > >>>>> def my_portal(request, user_id): > >>>>> template_list = get_portal_template_list(user_id) # returns > >>>>> list > >>>>> of strings, representing template names > >>>>> data = {'templates':template_list} > >>>>> for template in template_list: > >>>>> data.update(get_template_data(template, user_id)) > >>>>> render_to_response(data, "base_template.html") > > >>>>> in base_template.html > >>>>> {% for item in template_list %} > >>>>> {% include item %} > >>>>> {% endfor %} > > >>>>> You may also organize & test a little more using the "with" tag > >>>>> (it > >>>>> appears to works alongside "include"). e.g (with a modified view): > >>>>> {% for item in template_list %} > >>>>> {% with item.data as data %} > >>>>> {% include item.template %} > >>>>> {% endwith %} > >>>>> {% endfor %} > > >>>>> then in the included template: > >>>>> {{ data.field1 }} > >>>>> {{ data.field2 }} > > >>>>> HTH, > >>>>> -rob > > >>>>> On Jun 2, 4:51 am, patrickk <[EMAIL PROTECTED]> wrote: > >>>>>> This is a problem we´re having with every webpage we did with > >>>>>> django > >>>>>> so far. > >>>>>> Now, I´d like to make this more generic and write a tutorial for > >>>>>> how > >>>>>> aportal-like page could be done using django. > > >>>>>> As an example, let´s say we have a database with movies, stars > >>>>>> (actors, writers, directors ...), cinemas/theatres, interviews, > >>>>>> image- > >>>>>> galleries, trailers, filmfestivals, ... > >>>>>> Now, the editors should be able to "build" a page (e.g. the > >>>>>> front- > >>>>>> page) with different blocks of content like: > >>>>>> 1. a single object (e.g. a movie, star, interview ...) > >>>>>> 2. combined objects: a combination of x objects (e.g. "godard- > >>>>>> special" with a relation to a star (godard), a cinema where the > >>>>>> special takes place and several movies) > >>>>>> 3. pre-defined blocks (like "recent comments", "recent > >>>>>> interviews", > >>>>>> "most discussed movies" ...) > >>>>>> 4. custom entries > > >>>>>> ### 1 and 4 is easy: for 1, we can use a generic foreign key. > >>>>>> for 4, > >>>>>> we´re using a second table ("custom entries") and also a generic > >>>>>> foreign key - so 1 and 4 is basically the same. > >>>>>> ### For 2, we could also use the table "custom entries", but > >>>>>> with a > >>>>>> second table "custom entries item" for the (multiple) generic > >>>>>> relations. > >>>>>> ### for 3, we could either use template-tags or custom methods. > > >>>>>> The models are here:http://dpaste.com/hold/11537/ > >>>>>> And the view is here:http://dpaste.com/hold/11538/ > > >>>>>> So, the question are: > >>>>>> 1) Could this be done easier or more generic? > >>>>>> 2) How and where to define the custom methods? > > >>>>>> With the given models, we could construct a page like this: > >>>>>> #1 Movie Nr. 1234 > >>>>>> #2 custom method "Recent Comments" > >>>>>> #3 Interview Nr. 3456 > >>>>>> #4 Custom Entry "Godard-Special" (a custom entry with relations > >>>>>> to a > >>>>>> star, a cinema and several movies) > >>>>>> #5 custom method "Get Banner" > >>>>>> #6 Star Nr. 789 > > >>>>>> Note: The templates could be saved to the database for making > >>>>>> editing > >>>>>> easier (although I personally don´t like storing templates > >>>>>> within a > >>>>>> database). > > >>>>>> It´d be nice to see this issue solved in a resusable manner. > >>>>>> To me, > >>>>>> it seems a bit complicated the way we´re doing it right now. > >>>>>> Comments and Feedback is much appreciated ... > > >>>>>> Thanks, > >>>>>> Patrick --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-users@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/django-users?hl=en -~----------~----~----~----~------~----~------~--~---