1 from django.db import models
2 from django.http import HttpResponse, HttpResponseServerError, HttpResponseRedirect
3 from django.core.servers.basehttp import FileWrapper
4 from philo.models.base import InheritableTreeEntity
5 from philo.validators import RedirectValidator
8 class Node(InheritableTreeEntity):
9 accepts_subpath = False
11 def render_to_response(self, request, path=None, subpath=None):
12 return HttpResponseServerError()
15 unique_together = (('parent', 'slug'),)
19 class MultiNode(Node):
20 accepts_subpath = True
24 def render_to_response(self, request, path=None, subpath=None):
27 subpath = "/" + subpath
28 from django.core.urlresolvers import resolve
29 view, args, kwargs = resolve(subpath, urlconf=self)
30 return view(request, *args, **kwargs)
42 target = models.CharField(max_length=200,validators=[RedirectValidator()])
43 status_code = models.IntegerField(choices=STATUS_CODES, default=302, verbose_name='redirect type')
45 def render_to_response(self, request, path=None, subpath=None):
46 response = HttpResponseRedirect(self.target)
47 response.status_code = self.status_code
55 """ For storing arbitrary files """
56 mimetype = models.CharField(max_length=255)
57 file = models.FileField(upload_to='philo/files/%Y/%m/%d')
59 def render_to_response(self, request, path=None, subpath=None):
60 wrapper = FileWrapper(self.file)
61 response = HttpResponse(wrapper, content_type=self.mimetype)
62 response['Content-Length'] = self.file.size