Пример #1
0
    def clean_title(self):
        is_add = self.instance.pk is None
        # if a blog already exists with a similar title or
        # with a slug similar to one generated from the title,
        # raise error to notify the user about the same.
        self.slug = generate_slug(self.cleaned_data['title'])
        query = BlogPost.objects.filter(
            Q(title=self.cleaned_data['title']) | Q(slug=self.slug))
        if is_add:
            # during add.
            if query.count() > 0:
                raise forms.ValidationError(
                    _('Blog with a similar title already exists.'))
        else:
            # during edit.
            if query.exclude(pk=self.instance.pk).count() > 0:
                raise forms.ValidationError(
                    _('Blog with a similar title already exists.'))

        # make sure title is alphanumeric.
        try:
            int(self.cleaned_data['title'])
        except ValueError as e:
            pass
        else:
            raise forms.ValidationError(_('Invalid value.'))

        return clean_value(self.cleaned_data['title'],
                           tags=[])  # remove all HTML tags.
Пример #2
0
def create_post(request, slug):
    blog = get_object_or_404(Blog, slug=slug)

    if request.method == 'POST':
        form = PostForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            slug = generate_slug(post.title)

            conflicts = Post.objects.filter(slug__startswith=slug)
            if conflicts:
                slug = get_unique_slug(slug, conflicts)

            post.slug = slug
            post.author = request.user
            post.blog = blog
            post.save()

            # We don't want to start sending garbage requests while testing,
            # and we only want to do this on the first save of a published post,
            # not every update, otherwise we might get IP banned.
            if not settings.DEBUG:
                post.send_pingbacks()

            return redirect('view_post', post.created.year, post.get_formatted_month(), post.slug)
    else:
        form = PostForm()

    context = {
        'blog': blog,
        'post_form': form,
    }
    return render_to_response('blog/create_post.html', context, RequestContext(request))
Пример #3
0
 def save(self, **kwargs):
     """
     Override django Model save method to
     generate a slug from the title during create.
     """
     created = self.pk is None
     if created and not self.slug:
         self.slug = generate_slug(self.title)
     super(BlogPost, self).save(**kwargs)
Пример #4
0
def create_blog(request):
    if request.method == 'POST':
        form = BlogForm(request.POST)
        if form.is_valid():
            blog = form.save(commit=False)
            slug = generate_slug(blog.title)

            conflicts = Blog.objects.filter(slug__startswith=slug)
            if conflicts:
                slug = get_unique_slug(slug, conflicts)

            blog.slug = slug
            blog.owner = request.user
            blog.save()

            return redirect('view_blog', blog.slug)
    else:
        form = BlogForm()

    context = {
        'blog_form': form,
    }
    return render_to_response('blog/create_blog.html', context, RequestContext(request))