def entry_detail(request, date, slug): """Display one entry with the given slug and date. """ try: today = datetime.strptime(date, "%Y/%b/%d") tomorrow = today + timedelta(days=1) except: raise Http404 try: entry = EntryType.objects(publish_date__gte=today, publish_date__lt=tomorrow, slug=slug)[0] except IndexError: raise Http404 # Select correct form for entry type form_class = Comment.CommentForm if request.method == 'POST': form = form_class(request.user, request.POST) if form.is_valid(): # Get necessary post data from the form comment = HtmlComment(**form.cleaned_data) if request.user.is_authenticated(): comment.is_admin = True # Update entry with comment q = EntryType.objects(id=entry.id) comment.rendered_content = markup(comment.body, escape=True, small_headings=True) q.update(push__comments=comment) return HttpResponseRedirect(entry.get_absolute_url()+'#comments') else: form = form_class(request.user) # Check for comment expiry comments_expired = False if entry.comments_expiry_date: if entry.comments_expiry_date < datetime.now(): comments_expired = True context = { 'entry': entry, 'form': form, 'comments_expired': comments_expired, 'datenow': datetime.now(), } return render_to_response(_lookup_template('entry_detail'), context, context_instance=RequestContext(request))
def delete_comment(request): """Delete a comment from the database. """ comment_id = request.POST.get('comment_id', None) if request.method == 'POST' and comment_id: # Delete matching comment from entry entry = EntryType.objects(comments__id=comment_id).first() if entry: entry.comments = [c for c in entry.comments if c.id != comment_id] entry.save() return HttpResponseRedirect(entry.get_absolute_url()+'#comments') return HttpResponseRedirect(reverse('recent-entries'))
def recent_entries(request, page_number=1): """Show the [n] most recent entries. """ num = getattr(settings, 'PIXELCMS_NUM_ENTRIES_PER_PAGE', 10) entry_list = EntryType.live_entries() paginator = Paginator(entry_list, num) try: entries = paginator.page(page_number) except (EmptyPage, InvalidPage): entries = paginator.page(paginator.num_pages) context = { 'title': 'Recent Entries', 'entries': entries, 'no_entries_messages': NO_ENTRIES_MESSAGES, } return render_to_response(_lookup_template('list_entries'), context, context_instance=RequestContext(request))
def tagged_entries(request, tag=None, page_number=1): """Show a list of all entries with the given tag. """ tag = tag.strip().lower() num = getattr(settings, 'PIXELCMS_NUM_ENTRIES_PER_PAGE', 10) entry_list = EntryType.live_entries(tags=tag) paginator = Paginator(entry_list, num) try: entries = paginator.page(page_number) except (EmptyPage, InvalidPage): entries = paginator.page(paginator.num_pages) context = { 'title': 'Entries Tagged "%s"' % tag, 'entries': entries, 'no_entries_messages': NO_ENTRIES_MESSAGES, } return render_to_response(_lookup_template('list_entries'), context, context_instance=RequestContext(request))
} embed_patterns = ( ('youtube', r'youtube\.com\/watch\?v=([A-Za-z0-9._%-]+)[&\w;=\+_\-]*'), ('vimeo', r'vimeo\.com\/(\d+)'), ) def rendered_content(self): video_url = self.video_url for source, pattern in VideoEntry.embed_patterns: id = re.findall(pattern, video_url) if id: embed = VideoEntry.embed_codes[source] html = embed.replace('{{!ID}}', id[0]) break else: html = 'Video: <a href="video_url">%s</a>' % video_url if self.description: html += markup(self.description) return html class AdminForm(EntryType.AdminForm): video_url = forms.URLField() description = forms.CharField(widget=forms.Textarea, required=False) EntryType.register(TextEntry) EntryType.register(LinkEntry) EntryType.register(ImageEntry) EntryType.register(VideoEntry)
def render(self, context): context[self.var_name] = list(EntryType.live_entries()[:self.num]) return ''